二、现有HttpClient使用方式
在.Net Core2.1后,微软引入了HttpClientFactory彻底解决这个问题,工厂模式的职责是负责创建对象,这个类主要负责创建HttpClient实例
首先在StartUp中注册,可能会提示安装这个Nuget包
services.AddHttpClient();
该方法内部实现过程可以浏览:https://www.gxlcms.com/article/157254.htm
其次,在需要使用时,使用构造函数注入即可
[Route("api/[controller]")] [ApiController] public class HttpClientController : ControllerBase { IHttpClientFactory _httpClientFactory; public HttpClientController(IHttpClientFactory httpClientFactory) { _httpClientFactory = httpClientFactory; } [HttpGet] [Route(nameof(Index))] public async Task<IActionResult> Index() { var client = _httpClientFactory.CreateClient(); var result = await client.GetAsync("http://aspnetcore.online/api/resource/getresource"); return Ok(result); } }
具体实现原理简述为:HttpClientFactory内部管理着一个连接句柄池,对每一个HttpClient使用一个句柄进行跟踪管理,当该实例使用完毕后,句柄仍然控制资源释放,在短期大量处理时,可以将这部分句柄完成对不同实例的跟踪管理,使得句柄,也就是相应的套接字生命周期延长,对套接字完成了复用。
总结