asp.net-core - 如何使用 httpClientFactory 配置证书
问题描述
我正在使用httpClientFactory
请求微信支付 API,但微信支付 API 需要证书。如何配置httpClientFactory
以使用证书?
解决方案
首先,您需要注册您HttpClient
:
services.AddHttpClient("signed")
.ConfigurePrimaryMessageHandler(() =>
{
var handler = new HttpClientHandler();
var certificate = new X509Certificate2(filename: "foo.pfx", password: "123");
handler.ClientCertificateOptions = ClientCertificateOptions.Manual;
handler.ClientCertificates.Add(certificat);
});
在示例中,文件foo.pfx包含密码为123的证书。
签名是 的名称HttpClient
。
其次,您将调用IHttpClientFactory.CreateClient
创建HttpClient
实例。
public class PayClient
{
private readonly IHttpClientFactory _httpClientFactory;
public PayClient(IHttpClientFactory httpClientFactory)
{
_httpClientFactory = httpClientFactory;
}
public async Task SomePayMethodAsync()
{
using (httpClient = _httpClientFactory.CreateClient("signed"))
{
// use httpClient
}
}
}
您需要使用与的参数签名CreateClient
相同的名称。
稍后更新
HttpClient
如果您使用许多证书编写 SAAS,则可以在每次需要时手动创建和配置。这是最简单的方法。
public class PayClient
{
private readonly ICurrentUserProvider _currentUserProvider;
public PayClient(ICurrentUserProvider _currentUserProvider)
{
_currentUserProvider = currentUserProvider;
}
private HttpClient CreateHttpClient()
{
var currentUser = _currentUserProvider.CurrentUser;
var filename = currentUser.CertificateFilename;
var password = currentUser.CertificatePassword;
var handler = new HttpClientHandler();
var certificate = new X509Certificate2(filename, password);
handler.ClientCertificateOptions = ClientCertificateOptions.Manual;
handler.ClientCertificates.Add(certificat);
return new HttpClient(handler);
}
public async Task SomePayMethodAsync()
{
using (httpClient = CreateHttpClient())
{
// use httpClient
}
}
}
推荐阅读
- javascript - 如何定义状态 jquery/javascript?
- asp.net-core - 从 .Net Core 项目创建包时,但对项目的更改未反映在更新的包中
- excel - 为什么我收到“对象不支持此属性方法”?
- angular-cli - Angular 应用程序突然失败 - “JavaScript heap out of memory”
- javascript - 通过 Ajax 将页面加载到 div 会返回错误
- r - 如何使用 if 条件检查多个值
- amazon-web-services - 从 ListGroupsAsync 函数中使用 C# .net 中的 AWS cognito 检索组列表?
- ruby - Trailblazer 在验证前解析数据:populator
- python-3.x - while-if-elif 上的“无效语法”?
- json - Json 到 Excel(多级)