.net core 中使用httpclient,HttpClientFactory的問題


Microsoft 在.Net Framework 4.5中引入了HttpClient,並且是在.NET服務器端代碼中使用Web API的最常用方法。但它有一些嚴重的問題,如釋放HttpClient對象不立即關閉套接字,太多實例影響性能和單個的HttpClient或共享HttpClient實例不尊重DNS生存時間(TTL)設置。當並沒有大批量或者並發調用時,選擇 HttpClient 還行:

 private static readonly HttpClient HttpClient = new HttpClient();//定義




 var res = await HttpClient.GetStringAsync(url);//調用

 .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");
                          httpClient.Timeout = TimeSpan.FromSeconds(60);
                         Client = httpClient;

        }
    }
}

2.其他類中調用就好了:

  private static readonly HttpClient HttpClient = new HttpClient();
  private static readonly HttpClientFactory HttpClientFactory = new HttpClientFactory(HttpClient);
...
...
...


var res = await HttpClientFactory.Client.GetStringAsync(url);

okay,調用完成。

說明一下:在.net core 項目中使用HttpClientFactory的時候,要是在Startup.cs注冊時,要安裝:

Microsoft.Extensions.Http   nuget包,

直接搜索即可。

具體使用方法和參考鏈接如下:https://www.cjavapy.com/article/150/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM