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に登録する
使用法2、カスタムパッケージHttpClient
1、カスタムパッケージHttpClient
2、StartupにSampleClientを登録する
参考:https://blog.zhuliang.ltd/2019/02/net-core/HttpClient-HttpClientFactory-InNetCore.html
参考:
未完…
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
参考:
未完…