首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.Net核心HttpClientFactory处置HttpClientHandler

.Net核心HttpClientFactory处置HttpClientHandler
EN

Stack Overflow用户
提问于 2019-01-18 15:17:10
回答 1查看 4.1K关注 0票数 6

我目前正在以这种方式配置我的httpclientfactory

代码语言:javascript
复制
HttpClientHandler httpClientHandler = new HttpClientHandler()
{
    ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; }

};

serviceCollection.AddHttpClient("ignoreSSL", c =>
{}).ConfigurePrimaryHttpMessageHandler(h => httpClientHandler);

若要禁用安全证书的验证,但当执行太多请求时,我会收到以下异常:

无法访问已释放的对象。对象名:'SocketsHttpHandler‘。

我现在用这种方式构建我的httpclient

代码语言:javascript
复制
HttpClient client = _httpClientFactory.CreateClient("ignoreSSL");

在进行测试时,这种方法无需httpclientfactory就可以解决。

代码语言:javascript
复制
HttpClient ad = new HttpClient(handler, false);

对于比我所寻找的更多的东西,我找不到如何告诉httpclientfactory不要让处理程序处理?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-18 15:40:26

造成此问题的原因是,所有请求都使用单个HttpClientHandler实例。管理、池和循环处理程序是HttpClientFactory的工作。

看起来实际的问题是如何在使用HttpClientFactory时禁用证书验证。这需要配置它使用的客户端处理程序。

如文件所示 --这是使用ConfigurePrimaryHttpMessageHandler方法完成的。根据该方法的说明:

备注 每次调用消息处理程序时,委托都应该返回消息处理程序的一个新实例。

由该方法创建的处理程序将添加到处理程序池中,并由其他处理程序使用,例如Polly的重试处理程序。HttpClientFactory将回收旧的处理程序来处理DNS注册更改。

代码应该如下所示:

代码语言:javascript
复制
services.AddHttpClient<HttpWrapper>("ignoreSSL")
        .ConfigurePrimaryHttpMessageHandler(() =>
        {
            return new HttpClientHandler
            {
                ServerCertificateCustomValidationCallback = (m, crt, chn, e) => true
            };
        });
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54256792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档