在aspnetcore mvc控制器中部署httpClient

时间:2017-11-21 09:14:59

标签: c# rest asp.net-core-mvc asp.net-core-webapi

我正在创建一个新的Asp.Net Core(net standard 2)Mvc控制器,它使用WebAPI(REST)调用来获取数据。我正在关注来自微软和非微软来源的Interweb上的许多示例。这些都使用"标准"使用(var client = new HttpClient())构造 但是,请阅读HttpClient

的文档
  

HttpClient旨在实例化一次并在整个过程中重复使用   申请的生命。实例化HttpClient类   每个请求都会耗尽重量下的插座数量   负载。这将导致SocketException错误。以下是一个例子   正确使用HttpClient。

这让我想到了,我是否创建了一个范围实例并将其添加到DI中,或者在同一页面上跟随他们的示例,并在控制器上创建一个静态实例?如果是静态实例,我该如何处理呢?

或者,任何人都可以指向一个生产就绪的MVC包装器来进行标准的CRUD视图实现吗?

2 个答案:

答案 0 :(得分:1)

如果您还没有阅读"You're using HttpClient wrong and it is destabilizing your software"

  

如果你有任何负荷,你需要记住这两个   事情:

     
      
  1. 让您的HttpClient保持静态。
  2.   
  3. 除非您明确要查找特定行为(例如导致服务失败),否则不要将HttpClient丢弃或包装在使用中。
  4.   

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

e.g。 SimpleInjector的Singleton正在处理。

  

Simple Injector保证实例处于相反的位置   创造的顺序。

如果您仍想将其换行,请查看"Generic wrapper for calling ASP.NET WEB API REST service using HttpClient with optional HMAC authentication"

<强> UPD: 确保处置HttpRequestMessageHttpResponseMessage的实例。 See example of usage

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

答案 1 :(得分:0)

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

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

有关如何利用它的信息,请参见microsoft docs