C# 如何在Simple.OData.Client中使用证书身份验证?
如何在Simple.OData.Client中进行证书身份验证?我有X509Certificate2,我想在调用api时使用它。我使用.NETFramework4.6 我做了一些搜索,我知道可以通过HttpClientHandler添加。但我不知道该怎么做。下面是我的代码C# 如何在Simple.OData.Client中使用证书身份验证?,c#,odata,simple.odata,simple.odata.client,C#,Odata,Simple.odata,Simple.odata.client,如何在Simple.OData.Client中进行证书身份验证?我有X509Certificate2,我想在调用api时使用它。我使用.NETFramework4.6 我做了一些搜索,我知道可以通过HttpClientHandler添加。但我不知道该怎么做。下面是我的代码 void foo() { var clientSettings = new ODataClientSettings(""); clientSettings.OnApplyClientHandler = new Ac
void foo()
{
var clientSettings = new ODataClientSettings("");
clientSettings.OnApplyClientHandler = new Action<HttpClientHandler>(AddClientCertificate);
var client = new ODataClient(clientSettings);
}
private void AddClientCertificate(HttpClientHandler handler )
{
// I have working code to retrieve the certificate.
X509Certificate2 targetCertificate = RetrieveCertificate();
//TODO : Add the certificate to the HttpClientHandler
}
void foo()
{
var clientSettings=新的ODataClient设置(“”);
clientSettings.OnApplyClientHandler=新操作(AddClientCertificate);
var客户端=新ODataClient(客户端设置);
}
私有无效AddClientCertificate(HttpClientHandler处理程序)
{
//我有工作代码来检索证书。
X509Certificate2 targetCertificate=RetrieveCertificate();
//TODO:将证书添加到HttpClientHandler
}
简短:
使用ODataClientSettings.OnCreateMessageHandler
并返回a,然后设置ClientCertificates
再次查看代码之后,您需要做的是将委托分配给OnCreateMessageHandler,而不是OnApplyClientHandler,因为底层代码创建了一个HttpClientHandler,并且您需要一个WebRequestHandler,例如
请注意,如果您这样做,它将不会调用ApplyClientHandler,因此您还必须在此委托中分配任何其他消息处理程序。
我不能很容易地检查出这一点,因为我没有访问证书安全站点的权限,但代码中没有任何内容表明这不起作用
希望下面的代码片段之一工作良好
X509Certificate2 targetCertificate=RetrieveCertificate();
handler.ClientCertificates.Add(targetCertificate)代码>
var filePath=rootPath+@“/App_Data/apigee.pfx”
X509Certificate2Collection certificates=新的X509Certificate2Collection();
证书.Import(文件路径,“测试”,x509keystrageflags.MachineKeySet |
X509keystrageFlags.PersistKeySet)
httpClientHandler.ClientCertificates.AddRange(证书)代码>
var setting = new ODataClientSettings(baseAddresss, credentials)
{
OnCreateMessageHandler = {
var handler = new WebRequestHandler();
handler.ClientCertificates.Add(certificate);
return handler;
}
}