我目前正在以这种方式配置httpclientfactory
HttpClientHandler httpClientHandler = new HttpClientHandler()
{
ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; }
};
serviceCollection.AddHttpClient("ignoreSSL", c =>
{}).ConfigurePrimaryHttpMessageHandler(h => httpClientHandler);
要禁用安全证书的验证,但是当进行过多请求时,我会收到此异常:
无法访问已处置的对象。对象名称:“ SocketsHttpHandler”。
我目前以这种方式构建httpclient
HttpClient client = _httpClientFactory.CreateClient("ignoreSSL");
进行测试,可以通过这种方式解决,而无需httpclientfactory
HttpClient ad = new HttpClient(handler, false);
除了我所寻找的以外,我找不到如何告诉httpclientfactory
不要让处理程序处置?
答案 0 :(得分:2)
引起此问题的原因是单个 HttpClientHandler实例用于所有请求。管理,缓冲和回收处理程序是HttpClientFactory的工作。
看来,实际问题是使用HttpClientFactory时如何禁用证书验证。这需要配置它使用的客户端处理程序。
As the documentation shows这是使用ConfigurePrimaryHttpMessageHandler方法完成的。从方法的注释中:
备注
委托每次调用时都应返回消息处理程序的新实例。
由该方法创建的处理程序将添加到处理程序池中,并由其他处理程序(例如Polly的重试处理程序)使用。 HttpClientFactory将回收较旧的处理程序以处理DNS注册更改。
代码应如下所示:
services.AddHttpClient<HttpWrapper>("ignoreSSL")
.ConfigurePrimaryHttpMessageHandler(() =>
{
return new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (m, c, c, e) => true
};
});