.net Core 中所有 HttpClient 实例的默认配置

Default configuration for all HttpClient instances in .net Core

我有一个场景,我在 Startup.cs 中配置多个 HttpClient 实例,它们使用相同的 HttpClientHandlersHttpClients 之间的唯一区别是 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