我正在创建一个新的Asp.Net Core(net standard 2)Mvc控制器,它使用WebAPI(REST)调用来获取数据 . 我正在关注微软和非微软来源的Interweb上显示的许多示例 . 这些都使用"standard" using(var client = new HttpClient())构造 .
但是,请阅读HttpClient的文档
HttpClient旨在实例化一次,并在应用程序的整个生命周期中重复使用 . 为每个请求实例化一个HttpClient类将耗尽重负载下可用的套接字数量 . 这将导致SocketException错误 . 下面是一个正确使用HttpClient的示例 .
这让我想到了,我是否创建了一个范围实例并将其添加到DI中,或者在同一页面上跟随他们的示例,并在控制器上创建一个静态实例?如果是静态实例,我该如何处理它?
或者,任何人都可以指向一个 生产环境 就绪的MVC包装器,用于标准的CRUD视图实现吗?
1 回答
如果您还没有阅读"You're using HttpClient wrong and it is destabilizing your software" .
我同意
mike z
DI可以在这种情况下使用 .例如SimpleInjector的Singleton正在处理 .
如果您仍想包装它,请查看"Generic wrapper for calling ASP.NET WEB API REST service using HttpClient with optional HMAC authentication"
Upd: 确保丢弃
HttpRequestMessage
和HttpResponseMessage
的实例 . See example of usage资料来源:http://faithlife.codes/blog/2017/03/usage-guidelines-for-httpclient/