在控制檯程式中使用IHttpClientFactory
阿新 • • 發佈:2022-04-08
一、前言
一般來說我們傳送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); } } }
執行結果