.net core 在创建HttpClient的同一位置访问HttpClientHandler

.net core 在创建HttpClient的同一位置访问HttpClientHandler,.net-core,dotnet-httpclient,.net Core,Dotnet Httpclient,我有一个服务请求URL并验证服务器SSL证书。代码已经在完整的.NET框架中使用HttpWebRequest顺利运行,但现在我想将其迁移到HttpClient和.NET核心。我可以像这样获得证书(建议在多篇博客文章和堆栈溢出答案中使用此方法): X509Certificate2Cert=null; var httpClient=新的httpClient(新的HttpClientHandler { ServerCertificateCustomValidationCallback=(请求、证书、链

我有一个服务请求URL并验证服务器SSL证书。代码已经在完整的.NET框架中使用
HttpWebRequest
顺利运行,但现在我想将其迁移到
HttpClient
和.NET核心。我可以像这样获得证书(建议在多篇博客文章和堆栈溢出答案中使用此方法):

X509Certificate2Cert=null;
var httpClient=新的httpClient(新的HttpClientHandler
{
ServerCertificateCustomValidationCallback=(请求、证书、链、错误)=>
{
证书=证书;
返回true;
}
});
httpClient.GetAsync(…);
这里的问题是我不断地创建新的
HttpClient
实例,这是不推荐的。我想转到
HttpClientFactory
,为什么要在设置代码中添加以下内容:

服务
.AddHttpClient(“sslclient”,x=>
{
...
})
.ConfigurePrimaryHttpMessageHandler(()=>new HttpClientHandler
{
ServerCertificateCustomValidationCallback=(请求、证书、链、错误)=>
{
返回true;
}
});
现在的挑战是,代码创建的客户端不再具有对
服务器CertificateCustomValidationCallback的访问权限

var httpClient=httpClientFactory.CreateClient(“sslclient”);
有人知道如何解决这个问题吗?

Reddit的某个人提供了以下解决方案。一旦调用了
AddHttpClient
,就不能再修改
HttpClientHandler
。可以共享一个资源,但是:

var证书=新的ConcurrentDictionary();
服务。AddSingleton(证书);
服务
.AddHttpClient(“sslclient”,x=>
{
...
})
.ConfigurePrimaryHttpMessageHandler(()=>new HttpClientHandler
{
ServerCertificateCustomValidationCallback=(请求、证书、链、错误)=>
{
certificates.TryAdd(request.RequestUri.Host,新的X509Certificate2(certificate));
返回true;
}
});
在发出HTTP请求的代码中,还需要插入
证书
字典。发出请求后,您可以在字典中检查证书:

var response=wait-httpClient.GetAsync(url);
if(certificates.ContainsKey(uri.Host))
{
//快乐的日子!
}

也许我的回答对你有帮助,但我不这么认为。您仅使用控制器中的HttpClient发出请求。我的挑战是,我想在控制器内部获得回调。Thomas,我也处于同样的困境,将旧的.NET Framework移植到core 2.x+中首选的http客户端被证明是有趣的。在我的例子中,它是对cookie容器的访问。大灯泡坏了你提到了容器。自从你发布了答案后,有什么需要注意的吗?我不确定我是否理解这个问题?您想访问使用HttpClient的cookie容器?正确。我想对HttpClientFactory的使用和返回的HttpClient的各种风格进行标准化。我不知道您将如何使用HttpClient做到这一点。也许会提出一个新问题?