c# - 如何在 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 问题)。
解决方案
真的很简单。忽略IDisposable
它实现的接口并创建一个单点/对象,如ExampleApiClient
,您将从中调用它。
将您的会员声明为:
private static readonly HttpClient client = new HttpClient();
并通过在公共函数中使用它来封装它的使用。
不过,创建一个新客户端是有原因的。例如,如果您想调用多个不同的 api,具有不同的代理或默认标头,请为每个 api 创建一个,但肯定不是为每个请求创建一个。
推荐阅读
- java - 如何让它运行直到用户输入 0 或负数?
- c# - 请求表达式时防止隐式转换为 int
> - python - Python Twisted:如何通过 UDP 协议使用 HTB 速率限制
- java - 一个方法的返回语句是什么,它创建一个大小为 n 的数组,返回类型为 Integer[]?
- powershell - 以用户身份启动 PS1 并以当前 Windows 登录用户身份调用另一个 PS1 而不提示密码
- macos - 启动时仅在 MacOs 中启动一次守护程序
- php - 如何始终在php中获取相同的父类实例
- json - Python 3 Gzip json 用于在 API 上发布
- javascript - 如何在 AMP 网站中集成 Matomo 标签管理器?
- java - 使用 Java 8 和 Java 11 时如何修复“类 java.util.LinkedHashMap 无法转换为类”