繁体   English   中英

在 aspnetcore mvc 控制器中处理 httpClient

[英]disposing httpClient in aspnetcore mvc controller

我正在创建一个新的 Asp.Net Core(网络标准 2)Mvc 控制器,它使用 WebAPI(REST)调用来获取数据。 我正在关注来自微软和非微软来源的互联网上显示的许多示例。 这些都使用“标准” using(var client = new HttpClient()) 构造。
但是,然后阅读HttpClient的文档

HttpClient 旨在实例化一次并在应用程序的整个生命周期中重复使用。 为每个请求实例化一个 HttpClient 类将耗尽重负载下可用的套接字数量。 这将导致 SocketException 错误。 下面是一个正确使用 HttpClient 的例子。

这让我想到,我是创建一个作用域实例并将其添加到 DI,还是在同一页面上按照他们的示例,并在控制器上创建一个静态实例? 如果是静态实例,我该如何处置它?

或者,任何人都可以向我指出用于标准 CRUD 视图实现的生产就绪 MVC 包装器吗?

如果您还没有阅读 “您使用 HttpClient 错误并且它正在破坏您的软件的稳定性”

如果您有任何类型的负载,则需要记住以下两件事:

  1. 使您的 HttpClient 静态化。
  2. 除非您明确寻找特定行为(例如导致服务失败),否则不要在 using 中处理或包装您的 HttpClient。

我同意在这种情况下可以使用mike z DI。

例如 SimpleInjector 的Singleton负责处理。

Simple Injector 保证实例以与创建相反的顺序进行处理。


如果您仍然想包装它,请查看“使用带有可选 HMAC 身份验证的 HttpClient 调用 ASP.NET WEB API REST 服务的通用包装器”

更新:确保您处理了HttpRequestMessageHttpResponseMessage的实例。 查看使用示例

来源: http : //faithlife.codes/blog/2017/03/usage-guidelines-for-httpclient/

对于使用.net core 2.1或更高版本的任何人,建议使用HttpClientFactory

为了解决上述问题并使 HttpClient 实例的管理更容易,.NET Core 2.1 引入了一个新的 HttpClientFactory 也可用于实现弹性 HTTP 调用

有关如何利用它,请参阅microsoft 文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM