2017-03-10 34 views
3

如何在Simple.OData.Client中進行證書認證?我有調用api時想使用的X509Certificate2。我使用.net框架4.6。如何在Simple.OData.Client中使用證書身份驗證?

我做了一些搜索,我知道可以通過HttpClientHandler添加。但我無法弄清楚如何做到這一點。以下是我的代碼。

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 
} 

回答

0

: 使用ODataClientSettings.OnCreateMessageHandler並返回WebRequestHandler和設置ClientCertificates

I have found the solution from this github issue:

的代碼說完看着你再次需要做的是指定一個代表來OnCreateMessageHandler而非OnApplyClientHandler作爲底層代碼創建什麼HttpClientHandler,你需要一個WebRequestHandler例如

var setting = new ODataClientSettings(baseAddresss, credentials) 
{ 
    OnCreateMessageHandler = { 
    var handler = new WebRequestHandler(); 
    handler.ClientCertificates.Add(certificate); 

    return handler; 
    } 
} 

請注意,如果你這樣做,它不會叫OnApplyClientHandler所以你將不得不在這個代表也分配任何其他消息處理程序。 我無法輕易檢查這一點,因爲我沒有訪問證書安全站點的權限,但代碼中沒有任何內容表明這不起作用。

相關問題