- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想为 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/
我想为 Typed HttpClient 添加一个 HttClientHandler 以包含证书身份验证。 我在网上找的例子都是这样的: services.AddHttpClient() .C
我有一个 .NET Core 类库。我正在使用 IHttpClientFactory 创建没有依赖注入(inject)的 HttpClient 实例。我在我的类库中包含了 Microsoft DI n
我是一名优秀的程序员,十分优秀!