gpt4 book ai didi

c# - 如何使用 ConfigurePrimaryHttpMessageHandler 泛型

转载 作者:行者123 更新时间:2023-11-30 16:37:31 39 4
gpt4 key购买 nike

我想为 Typed HttpClient 添加一个 HttClientHandler 以包含证书身份验证。

我在网上找的例子都是这样的:

services.AddHttpClient<IMyService, MyService>()
.ConfigurePrimaryHttpMessageHandler(() =>
{
return new HttpClientHandler()
{
// Set here whatever you need to get configured
};
});

但我不想在这里包含所有获取证书的逻辑,所以我想使用ConfigurePrimaryHttpMessageHandler<>的通用版本并编写我自己的消息处理程序来包含证书在请求中。

问题是我很难理解我应该如何实现消息处理程序...我应该从 HttpClientHandler 继承吗??

请帮忙!

更新

正如我最初怀疑的那样,@Nkosi 证实,在这种情况下,从 HttpClient 处理程序派生是可行的方法。最后的代码看起来类似于:

public class MyHttpClientHandler : HttpClientHandler
{
private readonly IMyConfiguration _myConfiguration;

public MyHttpClientHandler(IMyConfiguration myConfiguration)
{
_myConfiguration = myConfiguration;

using (var certStore = new X509Store(StoreName.My, StoreLocation.LocalMachine))
{
certStore.Open(OpenFlags.ReadOnly);
var certCollection = certStore.Certificates.Find(
X509FindType.FindBySerialNumber,
_myConfiguration.MyCertificateSerial,
true);

X509Certificate2 certificate = certCollection[0];
ClientCertificateOptions = ClientCertificateOption.Manual;
SslProtocols = System.Security.Authentication.SslProtocols.Tls12;
ClientCertificates.Add(certificate);
}
}
}

非常重要!

另一方面,在尝试注册我的 http 客户端处理程序时,我注意到它从未被调用过。经过一些谷歌搜索后,我发现目前有一个关于它的开放错误(https://github.com/aspnet/Extensions/issues/851)。因此,在它得到修复之前,您需要以这种方式配置您的处理程序:

services.AddTransient<MyHttpClientHandler>();

services.AddHttpClient<IMyService, MyService>()
.ConfigurePrimaryHttpMessageHandler(sp => sp.GetRequiredService<MyHttpClientHandler>());

最佳答案

派生自 HttpClientHandler 或任何 HttpMessageHandler 派生类。

public class MyHttpClientHandler : HttpClientHandler {

public MyHttpClientHandler() {
//Set here whatever you need to get configured
}

//...override members as needed
}

使用适当的扩展调用您的处理程序

services
.AddHttpClient<IMyService, MyService>()
.ConfigurePrimaryHttpMessageHandler<MyHttpClientHandler>();

MyHttpClientHandler 将从范围内的服务提供者解析,该服务提供者共享正在构建的处理程序的生命周期。

关于c# - 如何使用 ConfigurePrimaryHttpMessageHandler 泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57875320/

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