C# HttpClientFactory-根据其名称获取命名的、类型化的客户端

C# HttpClientFactory-根据其名称获取命名的、类型化的客户端,c#,.net-core,asp.net-core-2.0,C#,.net Core,Asp.net Core 2.0,HttpClientFactory提供以下扩展方法: public static IHttpClientBuilder AddHttpClient<TClient>(this IServiceCollection services, string name) public static IHttpClientBuilder AddHttpClient(此IServiceCollection服务,字符串名称) 我创建了一个类型化的HttpClient,如下所示: public cl

HttpClientFactory提供以下扩展方法:

public static IHttpClientBuilder AddHttpClient<TClient>(this IServiceCollection services, string name)
public static IHttpClientBuilder AddHttpClient(此IServiceCollection服务,字符串名称)
我创建了一个类型化的HttpClient,如下所示:

public class CustomClient {

    public CustomClient(HttpClient client,
        CustomAuthorizationInfoObject customAuthorizationInfoObject) {
        /// use custom authorization info to customize http client
    }

    public async Task<CustomModel> DoSomeStuffWithClient() {
        /// do the stuff
    }

}
services.AddTransient<CustomAuthorizationInfoObject>();
services.AddHttpClient<CustomClient>("DefaultClient");
公共类客户机{
公共客户机(HttpClient,
CustomAuthorizationInfoObject(CustomAuthorizationInfoObject){
///使用自定义授权信息自定义http客户端
}
公共异步任务DoSomeStuffWithClient(){
///动手
}
}
我可以在程序的ServiceCollection中注册此自定义客户端,如下所示:

public class CustomClient {

    public CustomClient(HttpClient client,
        CustomAuthorizationInfoObject customAuthorizationInfoObject) {
        /// use custom authorization info to customize http client
    }

    public async Task<CustomModel> DoSomeStuffWithClient() {
        /// do the stuff
    }

}
services.AddTransient<CustomAuthorizationInfoObject>();
services.AddHttpClient<CustomClient>("DefaultClient");
services.AddTransient();
服务。AddHttpClient(“DefaultClient”);
然后,我可以注册此CustomClient的第二个实例,其中包含一些稍加修改的信息:

services.AddHttpClient<CustomClient>("AlternativeAuthInfo", (client) => {
    client.DefaultRequestHeaders.Authorization = ...;
});
services.AddHttpClient(“AlternativeAuthInfo”,(客户端)=>{
client.DefaultRequestHeaders.Authorization=。。。;
});
在程序的其他地方,我现在想获得一个名为
CustomClient
的特定客户端。这就是障碍所在

只要向服务提供商请求
CustomClient
,我就可以获得最后添加到服务中的
CustomClient

例如,调用
IHttpClientFactory.CreateClient(“AlternativeAuthInfo”)
,将返回一个
HttpClient
,因此我无法访问CustomClient中的额外方法,并且那里似乎没有任何其他方法可以帮助我


因此,我如何获得一个命名的CustomClient?还是我滥用了通过原始扩展方法命名和引用类型化客户机的机会

我看到有一个
ITypedHttpClientFactory
接口,可以将常规的
HttpClient
封装在一个类型化的接口中。没有亲自使用,但那是丢失的一块吗

e、 g

///获取命名的httpclient
var altHttpClient=httpClientFactory.CreateClient(“AlternativeAuthInfo”);
///从服务提供程序获取类型化的客户端工厂
var typedClientFactory=serviceProvider.GetService();
///创建类型化客户端
var altCustomClient=typedClientFactory.CreateClient(altHttpClient);

我已经看到了这一点,但它似乎并不关心HttpClient拥有的名称。尽管我认为我可以自己获取命名的HttpClient,然后使用它返回键入的HttpClient。我会有一点俏皮的样子来弥补缺失的部分,谢谢!感觉有点笨重-我想知道为什么IHttpClientFactory不能有一个通用的CreateClient(“名称”)方法来绕过此操作,但仍将执行以下操作job@DaveCluderay您是否知道
itypedhtpclientfactory
是否可以与从
AddTypedClient
扩展方法中的处理程序创建的自定义类型一起使用(如
services.AddHttpClient(name).AddTypedClient(customTypeFactory)
)?感谢您提供的任何见解。