AS.NET Core-Http Client FactoryでHttp Clientを使用する

8165 ワード

概要:
NET Frame workでHttpClientを使って直接このように使います. using(var client=new Http Client){} ,高合併時に頻繁にsocketを作成して、接続が間に合わなくて釈放して、socketは消耗されて、問題が発生します.
だから頻繁にHttpClientオブジェクトを作成しなくてもいいです.多重して、静的に設定できます.そして成長接続を設定します.以前の教程で紹介しました.このように使うのはちょっと問題があります.DNSの更新は無効になります.
CoreではHttpClient Factoryを使ってHttp Clientを作成し、目的も多重Http Clientです.名前の通りHttpClient FactoryはHttpClientの工場です.内部ではHttp Clientの管理をしてくれました.私達が人工的に対象を釈放する必要はありません.また、カスタム要求ヘッドをサポートします.DNS更新などをサポートします.
Http Client Factoryの使い方:
使い方1、直接にHttp Client Factoryを使います.
1、startupに登録する
   public void ConfigureServices(IServiceCollection services)
   {
       //other codes

       services.AddHttpClient("client_1",config=>  //      name=client_1 ,             
       {
           config.BaseAddress= new Uri("http://client_1.com");
           config.DefaultRequestHeaders.Add("header_1","header_1");
       });
       services.AddHttpClient("client_2",config=>
       {
           config.BaseAddress= new Uri("http://client_2.com");
           config.DefaultRequestHeaders.Add("header_2","header_2");
       });
       services.AddHttpClient();
   }
2、Controllerで使用する
public class TestController : ControllerBase
{
 private readonly IHttpClientFactory _httpClient;
 public TestController(IHttpClientFactory httpClient)
 {
     _httpClient = httpClient;
 }

 public async Task Test()
 {
     var client = _httpClient.CreateClient("client_1"); //    Startup      client_1   httpclient
     var result = await client.GetStringAsync("/page1.html");

     var client2 = _httpClient.CreateClient(); //     HttpClient
     var result2 = await client.GetStringAsync("http://www.site.com/XXX.html");

     return null;
 }
}
 
 使用法2、カスタムパッケージHttpClient
1、カスタムパッケージHttpClient
    public interface ISampleClient
    {
        Task<string> GetData();
    }

    public class SampleClient : ISampleClient
    {
        private readonly HttpClient _client;

        public SampleClient(IHttpClientFactory httpClientFactory)
        {
            var httpClient = httpClientFactory.CreateClient();
            httpClient.BaseAddress = new Uri("https://www.taobao.com/");
            //httpClient.DefaultRequestHeaders.Add("Accept", "application/json");
            //httpClient.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Sample");
            _client = httpClient;
        }

        public async Task<string> GetData()
        {
            return await _client.GetStringAsync("/");
        }
    }
 
2、StartupにSampleClientを登録する
services.AddHttpClient();
3、呼び出し
public class ValuesController : Controller
{
    private readonly ISampleClient  _sampleClient;;

    public ValuesController(ISampleClient  sampleClient)
    {
        _sampleClient = sampleClient;
    }

    [HttpGet]
    public async Task Get()
    {
        string result = await _sampleClient.GetData();
        return Ok(result);
    }
}
 
 
 
 
参考:https://blog.zhuliang.ltd/2019/02/net-core/HttpClient-HttpClientFactory-InNetCore.html
参考:
 
未完…