.net - .Net Core HttpClientFactory 配置 HttpClientHandler
问题描述
我目前正在配置我的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
不让处理程序处置?
解决方案
问题是因为单个HttpClientHandler 实例用于所有请求。管理、汇集和回收处理程序是 HttpClientFactory 的工作。
看起来实际的问题是如何在使用 HttpClientFactory 时禁用证书验证。这需要配置它使用的客户端处理程序。
正如文档所示,这是使用ConfigurePrimaryHttpMessageHandler方法完成的。从方法的评论:
评论
委托应在每次调用时返回消息处理程序的新实例。
由该方法创建的处理程序将被添加到处理程序池中,并由其他处理程序(如 Polly 的重试处理程序)使用。HttpClientFactory 将回收旧的处理程序来处理 DNS 注册更改。
代码应如下所示:
services.AddHttpClient<HttpWrapper>("ignoreSSL")
.ConfigurePrimaryHttpMessageHandler(() =>
{
return new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (m, crt, chn, e) => true
};
});
推荐阅读
- android - 带有koin的Android多显示应用程序-根据运行的屏幕向同一活动注入不同的首选项
- structure - Twincat 3 - SizeOf 返回错误的结构大小
- c# - 模拟 Azure 函数 HttpTrigger 和设置查询字符串
- wso2 - 访问 wso2 分析仪表板时出现此错误的原因是什么
- amazon-web-services - 参数 groupName 不能与参数子网一起使用。创建负载均衡的 EC2 实例
- python - 如何在 Windows 服务器上部署 Python 作为后端?
- batch-file - 批处理,制作一个 .ini 文件来读取
- r - 如何使用 filterbyExpr
- extjs - Extjs 3.0.2 升级到 4.0.2 压缩输入失败
- c - c中的printf中出现意外的换行符