在控制台程序中使用IHttpClientFactory
一、前言
一般来说我们发送Web请求的时候,都是通过HttpClient。但是使用的时候会有两个问题:
- 因为HttpClient实现了IDisposable接口,每次使用如果都new一个对象的话,最后会耗尽你的主机端口。微软建议使用单例模式。
- 如果使用单例模式的话,端口是节省了,但是请求地址的DNS如果改变了的话,这个单例并不知道。
为了解决上面的两个问题,社区就出现了HttpClientFactory的开源方案。现在微软也将其添加到了. net core中。并且基于. net standard 2.0。
如果是在.Net Core的web项目中,我们可以直接在ConfigureServices方法中配置使用
services.AddHttpClient();
那么在控制台项目中如何使用呢。在.net framework和.net core的控制台中都可以使用, 但是要求你的 .net framework版本至少为4.6.1.
二、示例代码
添加一个控制台项目,并nuget上安装下面两个包:Microsoft.Extensions.Http和Microsoft.Extensions.DependencyInjection。
using Microsoft.Extensions.DependencyInjection; using System; using System.Net.Http; namespace HttpClientFactoryTest { class Program { static void Main(string[] args) { Test(); Console.ReadKey(); } static async void Test() { var serviceProvider = new ServiceCollection().AddHttpClient().BuildServiceProvider(); var httpClientFactory = serviceProvider.GetService<IHttpClientFactory>(); var client = httpClientFactory.CreateClient(); var response = await client.GetAsync("http://www.baidu.com"); var content = await response.Content.ReadAsStringAsync(); Console.WriteLine(content); } } }
运行结果