炫意html5
最早CSS3和HTML5移动技术网站之一

如何使用IHttpClientFactory动态添加cer证书

官方给的示例 IHttpClientFactory 如果需要配置文件都是在 services.AddHttpClient()这里配置

var clientCertificate =
new X509Certificate2(
Path.Combine(_environment.ContentRootPath, "sts_dev_cert.pfx"), "1234");
var handler = new HttpClientHandler();
handler.ClientCertificates.Add(clientCertificate);
services.AddHttpClient("namedClient", c =>
{
}).ConfigurePrimaryHttpMessageHandler(() => handler);

想问一下 有办法不在这里添加证书,在请求的时候 动态添加证书吗,比如 我有多个证书,我需要在请求A连接需要A证书 在请求B链接使用B证书。这样应该怎么操作啊?大佬们求救

回答

方法一: 推荐的做法是这样子
services.AddHttpClient(“a业务”).ConfigurePrimaryHttpMessageHandler(…a业务证书)
services.AddHttpClient(“b业务”).ConfigurePrimaryHttpMessageHandler(…b业务证书)
ServiceProvider.GetService<IHttpClientFactory>().CreateClient(“a业务”)….

方法二:
如果你要完全自定义则可以用 new System.Net.Http.HttpClient(handler)

方法三:
在或者用骚操作, 替换配置的方式也可以 逻辑就是实现一个自己的HttpClientFactoryOptions, 然后动态生成它.
get_cert_handler_by_name 是你自己的方法,可以根据任何是否使用区别业务名称a,b,c new 一个handler.
但是要注意, 这样子所有从ServiceProvider获取HttpClient都会走到这个自定义配置类上面, 要做好兼容性.

class MyClass : IPostConfigureOptions<HttpClientFactoryOptions>
        {
            public void PostConfigure(string name, HttpClientFactoryOptions options)
                => options.HttpMessageHandlerBuilderActions.Add(p => p.PrimaryHandler = get_cert_handler_by_name(name));
        }
//注册这个服务
services.AddSingleton<Microsoft.Extensions.Options.IPostConfigureOptions<Microsoft.Extensions.Http.HttpClientFactoryOptions>, MyClass>();

炫意HTML5 » 如何使用IHttpClientFactory动态添加cer证书

Java基础教程Android基础教程