文章目录
一、IHttpClientFactory来CreateClient
1.构造IHttpClientFactory对象
public class ClientServiceClient
{
IHttpClientFactory _httpClientFactory;
public ClientServiceClient(IHttpClientFactory httpClientFactory)
{
_httpClientFactory = httpClientFactory;
}
public async Task<string> Get()
{
var client = _httpClientFactory.CreateClient();
return await client.GetStringAsync("http://localhost:6848/ClientService");
}
}
2.在ConfigureServices中注册服务
代码如下(示例):
services.AddMvc().AddControllersAsServices();
services.AddHttpClient();
services.AddScoped<ClientServiceClient>();
3.在ClientController中调用
ClientServiceClient _clientServiceClient;
private readonly ILogger<ClientController> _logger;
public ClientController(ILogger<ClientController> logger, ClientServiceClient clientServiceClient)
{
_logger = logger;
_clientServiceClient = clientServiceClient;
}
[HttpGet("Get")]
public async Task<string> Get()
{
return await _clientServiceClient.Get();
}
二、命名HttpClient
1.构造IHttpClientFactory对象
public class NamedClientServiceClient
{
private const string ClientName = "NamedClientServiceClient";
IHttpClientFactory _httpClientFactory;
public NamedClientServiceClient(IHttpClientFactory httpClientFactory)
{
_httpClientFactory = httpClientFactory;
}
public async Task<string> Get()
{
var client = _httpClientFactory.CreateClient(ClientName);
return await client.GetStringAsync("/ClientService");
}
}
2.在ConfigureServices中注册服务
代码如下(示例):
CustomtReqDelegatingHandler:
public class CustomtReqDelegatingHandler:DelegatingHandler
{
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
request.Headers.Add("custom-id", Guid.NewGuid().ToString());
return await base.SendAsync(request, cancellationToken);
}
}
注册服务和配置地址api
services.AddSingleton<CustomtReqDelegatingHandler>();
services.AddHttpClient("NamedClientServiceClient", client =>
{
client.DefaultRequestHeaders.Add("ClientName", "FiseaTest");
client.BaseAddress = new Uri("http://localhost:6848");
}).SetHandlerLifetime(TimeSpan.FromMinutes(20))
.AddHttpMessageHandler(provider => { return provider.GetService<CustomtReqDelegatingHandler>(); });
services.AddScoped<NamedClientServiceClient>();
3.在ClientController中调用
[HttpGet("NamedGet")]
public async Task<string> NamedGet([FromServices]NamedClientServiceClient service)
{
return await service.Get();
}
三、类型 HttpClient
1.构造IHttpClientFactory对象
public class TypeClientServiceClient
{
System.Net.Http.HttpClient _httpClient;
public TypeClientServiceClient(System.Net.Http.HttpClient httpClient)
{
_httpClient = httpClient;
}
public async Task<string> Get()
{
return await _httpClient.GetStringAsync("/ClientService");
}
}
2.在ConfigureServices中注册服务
代码如下(示例):
services.AddHttpClient<TypeClientServiceClient>(client=> {
client.BaseAddress = new Uri("http://localhost:6848");
});
3.在ClientController中调用
[HttpGet("TypeGet")]
public async Task<string> TypeGet([FromServices]TypeClientServiceClient service)
{
return await service.Get();
}

本文详细介绍了如何利用IHttpClientFactory创建、管理和配置HttpClient,包括基础创建、命名客户端以及处理Http请求的方法。通过示例代码展示了在ConfigureServices中注册服务和在ClientController中调用的步骤。
646

被折叠的 条评论
为什么被折叠?



