首页 > 解决方案 > 如何在 asp.net webforms 中使用 HttpClient

问题描述

我花了很多时间研究,但还没有找到可靠的答案,所以我想开始一个全新的问题。

在基于 ASP.NET webforms 的网站中使用 HttpClient 类的指导是什么?请注意,这不是 MVC 站点,也不是 .NET Core。这是一个 ASP.NET Webforms 网站。它位于最新的 .NET Framework (4.8) 上。

技术挑战似乎围绕着 HttpClient 导致套接字耗尽的所有“你做错了”。所以建议是使用依赖注入(假设你正在做一个 .net 核心网络应用程序)或静态实例(通常用于控制台应用程序)。但是您真的会为 Web 表单站点(在 App_Code 或 Global.asax 中)声明一个静态变量吗?

使用任何一种常见的 REST API 都很难“正确”,这似乎令人难以置信。

另一个挑战是它的所有方法都是异步的。但是,我认为在阅读了Stephen Cleary的足够多的帖子(和 SO 答案)之后,这是可行的。

我在这里的主要关注点,特别是 HttpClient,是它在基于 Web 表单的网站中的正确使用(生命周期管理,避免套接字耗尽问题以及“长寿命”实例的陈旧 DNS 问题)。

标签: c#asp.netwebformsdotnet-httpclient.net-framework-4.8

解决方案


真的很简单。忽略IDisposable它实现的接口并创建一个单点/对象,如ExampleApiClient,您将从中调用它。

将您的会员声明为:

private static readonly HttpClient client = new HttpClient();

并通过在公共函数中使用它来封装它的使用。

不过,创建一个新客户端是有原因的。例如,如果您想调用多个不同的 api,具有不同的代理或默认标头,请为每个 api 创建一个,但肯定不是为每个请求创建一个。


推荐阅读