【发布时间】:2017-07-15 21:00:56
【问题描述】:
在过去的 20 分钟里,我一直在尝试向 .NET Core 1.1 WebAPI 中的 HttpClient 添加客户端证书,但无法弄清楚问题所在。当我调试程序并检查证书是否与处理程序一起附加时,我能够看到证书。不过,我仍然收到 401。我确定证书已正确安装在其他 API 上,因为我可以从另一个程序使用它进行调用。另一个程序正在使用 .NET Framework 4.5.2,但我怀疑这将是代码几乎相同的问题。唯一的区别是我需要为 .NET Core 使用 HttpClientHandler 而不是 WebRequestHandler。
.NET Core 1.1
string uri = "https://other-api-url.com/something";
try
{
X509Certificate2 clientCert = GetClientCertificate();
HttpClientHandler client = new HttpClientHandler();
requestHandler.ClientCertificates.Add(clientCert);
HttpClient client = new HttpClient(requestHandler)
{
BaseAddress = new Uri(uri)
};
HttpResponseMessage response = client.GetAsync("").Result;
response.EnsureSuccessStatusCode();
string responseContent = response.Content.ReadAsStringAsync().Result;
return Ok(responseContent);
}
catch (Exception ex)
{
return BadRequest(ex.Message + uri);
}
.NET Framework 4.5.2 代码:
string uri = "https://other-api-url.com/something";
try
{
X509Certificate2 clientCert = GetClientCertificate();
WebRequestHandler requestHandler = new WebRequestHandler();
requestHandler.ClientCertificates.Add(clientCert);
HttpClient client = new HttpClient(requestHandler)
{
BaseAddress = new Uri(uri)
};
HttpResponseMessage response = client.GetAsync("").Result;
response.EnsureSuccessStatusCode();
string responseContent = response.Content.ReadAsStringAsync().Result;
return Ok(responseContent);
}
catch (Exception ex)
{
return BadRequest(ex.Message + uri);
}
【问题讨论】:
-
你是说它在 4.5.2 版本中有效吗?问题不清楚。
-
是的,它适用于 4.5.2。
标签: c# asp.net-core x509certificate dotnet-httpclient client-certificates