gpt4 book ai didi

c# - 如何使用 .Net Core 中的单个 HttpClient 实例针对不同的请求发送不同的客户端证书?

转载 作者:行者123 更新时间:2023-12-03 17:49:05 25 4
gpt4 key购买 nike

HttpClient的推荐是到 reuse a single instance .但是从 API 来看,添加证书的方式似乎是在实例上,而不是每个请求。例如,如果我们添加两个证书,我们如何确保“cert 1”仅发送到“one.somedomain.com”?

//A handler is how you add client certs (is there any other way?)
var _clientHandler = new HttpClientHandler();

//Add multiple certs
_clientHandler.ClientCertificates.Add(cert1);
_clientHandler.ClientCertificates.Add(cert2);
_clientHandler.ClientCertificateOptions = ClientCertificateOption.Manual;


//Pretend this is our long-living HttpClient
var client = new HttpClient(_clientHandler);

//Now if we make a post request, will both certs be used?
using (HttpResponseMessage response = _client.PostAsync("https://one.somedomain.com", content).Result)
{
//...elided...
}

最佳答案

对不起。年底工作量大。
你可以尝试实现这样的事情:

public class CustomHttpHandler : HttpClientHandler
{
private readonly Dictionary<string, X509Certificate> _certMap;

public CustomHttpHandler():base()
{
_certMap = new Dictionary<string, X509Certificate>() { { "server1name", new X509Certificate("cert1") }, { "server2name", new X509Certificate("cert2") } };
}

protected override async Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken cancellationToken)
{
string serverName = request.RequestUri.Host;
if (ClientCertificates.Contains(_certMap[serverName]))
{
try
{
var response = await base.SendAsync(request, cancellationToken);
return response;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadKey();
throw;
}
}
else
{
ClientCertificates.Clear();
ClientCertificates.Add(_certMap[serverName]);

try
{
var response = await base.SendAsync(request, cancellationToken);
return response;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadKey();
throw;
}
}
}
}

只是一个想法,没有测试过。
或者,您也可以使用 Headers收藏于 RequestMessage实例。
本文涵盖的主题: https://damienbod.com/2019/09/07/using-certificate-authentication-with-ihttpclientfactory-and-httpclient/

关于c# - 如何使用 .Net Core 中的单个 HttpClient 实例针对不同的请求发送不同的客户端证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59394842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com