.net core 中使用httpclient,HttpClientFactory的問題
阿新 • • 發佈:2018-12-20
Microsoft 在.Net Framework 4.5中引入了HttpClient,並且是在.NET伺服器端程式碼中使用Web API的最常用方法。但它有一些嚴重的問題,如釋放HttpClient物件不立即關閉套接字,太多例項影響效能和單個的HttpClient或共享HttpClient例項不尊重DNS生存時間(TTL)設定。當並沒有大批量或者併發呼叫時,選擇 HttpClient 還行:
private static readonly HttpClient HttpClient = new HttpClient();//定義 var res = HttpClient.GetStringAsync(url).Result;//呼叫
.net core 2.1 引入了HttpClientFactory的一些問題,當高併發時可以使用HttpClientFactory,例子連結裡有,我只介紹一個在類庫中使用方法:
1.類庫中建封裝類:
using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Threading.Tasks; namespace Oss.Utils { public class HttpClientFactory { public HttpClient Client { get; private set; } public HttpClientFactory(HttpClient httpClient) { httpClient.BaseAddress = new Uri("https://api.github.com/"); httpClient.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json"); httpClient.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Sample"); Client = httpClient; } } }
2.其他類中呼叫就好了:
private static readonly HttpClient HttpClient = new HttpClient(); private static readonly HttpClientFactory HttpClientFactory = new HttpClientFactory(HttpClient); ... ... ... var res = HttpClientFactory.Client.GetStringAsync(url).Result;
okay,呼叫完成。
說明一下:在.net core 專案中使用HttpClientFactory的時候,要是在Startup.cs註冊時,要安裝:
Microsoft.Extensions.Http nuget包,
直接搜尋即可。
具體使用方法和參考連結如下:https://www.cjavapy.com/article/150/