.net Core 中所有 HttpClient 实例的默认配置
Default configuration for all HttpClient instances in .net Core
我有一个场景,我在 Startup.cs
中配置多个 HttpClient
实例,它们使用相同的 HttpClientHandlers
。 HttpClients
之间的唯一区别是 BaseAddress
属性 和各自 HttpClient
实例的名称,因为我使用的是命名 HttpClients
.
我想知道是否有可能创建一个默认的 HttpClient
,我将在其中添加所有这些处理程序,然后命名实例将继承它们,或者是否有其他方法我该如何集中添加这些处理程序,而无需为每个 HttpClient
个实例手动添加它们。
private void ConfigureHttpClients(IServiceCollection services)
{
services.AddHttpClient<IService1, Service>(client =>
{
client.BaseAddress = new Uri("http://api.test.com/");
})
.UseErrorHandling()
.UseDefaultHeaders();
services.AddHttpClient<IService2, Service2>(client =>
{
client.BaseAddress = new Uri("http://api.test-test.com/");
})
.UseErrorHandling()
.UseDefaultHeaders();
}
这种情况的改进可能是这样的扩展方法:
public static void AddMyHttpClient<TClient, TImplementation>( this IServiceCollection services,
string baseUri )
{
services.AddHttpClient<TClient, TImplementation>(client =>
{
client.BaseAddress = new Uri(baseUri);
})
.UseErrorHandling()
.UseDefaultHeaders();
}
然后可以用作
services.AddMyHttpClient<IService1, Service>("http://api.test.com/");
在Startup.cs
我有一个场景,我在 Startup.cs
中配置多个 HttpClient
实例,它们使用相同的 HttpClientHandlers
。 HttpClients
之间的唯一区别是 BaseAddress
属性 和各自 HttpClient
实例的名称,因为我使用的是命名 HttpClients
.
我想知道是否有可能创建一个默认的 HttpClient
,我将在其中添加所有这些处理程序,然后命名实例将继承它们,或者是否有其他方法我该如何集中添加这些处理程序,而无需为每个 HttpClient
个实例手动添加它们。
private void ConfigureHttpClients(IServiceCollection services)
{
services.AddHttpClient<IService1, Service>(client =>
{
client.BaseAddress = new Uri("http://api.test.com/");
})
.UseErrorHandling()
.UseDefaultHeaders();
services.AddHttpClient<IService2, Service2>(client =>
{
client.BaseAddress = new Uri("http://api.test-test.com/");
})
.UseErrorHandling()
.UseDefaultHeaders();
}
这种情况的改进可能是这样的扩展方法:
public static void AddMyHttpClient<TClient, TImplementation>( this IServiceCollection services,
string baseUri )
{
services.AddHttpClient<TClient, TImplementation>(client =>
{
client.BaseAddress = new Uri(baseUri);
})
.UseErrorHandling()
.UseDefaultHeaders();
}
然后可以用作
services.AddMyHttpClient<IService1, Service>("http://api.test.com/");
在Startup.cs