ASP.NET Core-通过HttpClientFactory使用HttpClient
2021-04-30 14:30
标签:factory get ati int add action oba col dht 在.NET Framwork中使用HttpClient直接这样使用 using(var client = new HttpClient()){} ,高并发时频繁创建socket,连接来不及释放,socket被耗尽,就会出现问题。 所以不用频繁创建HttpClient对象,要复用,可以设置成静态,并且设置成长连接,我之前的教程有介绍。这样使用有一点问题是DNS更新会失效 在Core中使用HttpClientFactory创建HttpClient,目的也是复用HttpClient。顾名思义 HttpClientFactory 就是 HttpClient 的工厂,内部已经帮我们处理好了对 HttpClient 的管理,不需要我们人工进行对象释放,同时,支持自定义请求头,支持DNS更新等等等。 用法1,直接使用HttpClientFactory 1、在startup中注册 2、Controller中使用 用法2,自定义类封装HttpClient 1、自定义类封装HttpClient 2、Startup中注册SampleClient 3、调用 参考:https://blog.zhuliang.ltd/2019/02/net-core/HttpClient-HttpClientFactory-InNetCore.html 参考: 未完待续... ASP.NET Core-通过HttpClientFactory使用HttpClient 标签:factory get ati int add action oba col dht 原文地址:https://www.cnblogs.com/fanfan-90/p/12151598.html概述:
HttpClientFactory使用方法:
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();
}
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;
}
}
public interface ISampleClient
{
Taskstring> 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 Taskstring> GetData()
{
return await _client.GetStringAsync("/");
}
}
services.AddHttpClient
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);
}
}
上一篇:原生js 文件 上传 下载封装
下一篇:webGL 绘制图形
文章标题:ASP.NET Core-通过HttpClientFactory使用HttpClient
文章链接:http://soscw.com/index.php/essay/80440.html