Dav*_*ruz 6 .net .net-core asp.net-core
我目前正在以httpclientfactory这种方式配置我的
HttpClientHandler httpClientHandler = new HttpClientHandler()
{
ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; }
};
serviceCollection.AddHttpClient("ignoreSSL", c =>
{}).ConfigurePrimaryHttpMessageHandler(h => httpClientHandler);
Run Code Online (Sandbox Code Playgroud)
要禁用安全证书的验证,但在执行太多请求时,我收到此异常:
无法访问已处置的对象。对象名称:'SocketsHttpHandler'。
我目前以httpclient这种方式构建我的
HttpClient client = _httpClientFactory.CreateClient("ignoreSSL");
Run Code Online (Sandbox Code Playgroud)
做测试,这样就解决了,不用 httpclientfactory
HttpClient ad = new HttpClient(handler, false);
Run Code Online (Sandbox Code Playgroud)
对于多我找我找不到如何告诉httpclientfactory不让处理程序处理?
Pan*_*vos 10
该问题是由于单个HttpClientHandler 实例用于所有请求而引起的。管理、汇集和回收处理程序是 HttpClientFactory 的工作。
看起来实际的问题是如何在使用 HttpClientFactory 时禁用证书验证。这需要配置它使用的客户端处理程序。
正如文档所示,这是使用ConfigurePrimaryHttpMessageHandler方法完成的。从方法的注释:
评论
每次调用时,委托都应返回消息处理程序的新实例。
由该方法创建的处理程序将被添加到处理程序池中,并由其他处理程序(如 Polly 的重试处理程序)使用。HttpClientFactory 将回收旧的处理程序来处理 DNS 注册更改。
代码应如下所示:
services.AddHttpClient<HttpWrapper>("ignoreSSL")
.ConfigurePrimaryHttpMessageHandler(() =>
{
return new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (m, crt, chn, e) => true
};
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2642 次 |
| 最近记录: |