2016-12-01 36 views
1

我有以下C#代碼試圖對特定網址發出https請求。如果我將URL更改爲指向不是https的QAS服務器,則所有工作都正常。我已經嘗試了很多設置的組合,但是我沒有做任何事情似乎可以讓它正常工作。你可以看到我在評論中所做的幾種不同的組合。401未授權的異常與WebRequest的SSL

var request = (HttpWebRequest)WebRequest.Create(nextUrl); 
request.AllowAutoRedirect = false; 
request.UseDefaultCredentials = true; 
request.KeepAlive = false; 
//request.PreAuthenticate = true; 
//request.Credentials = CredentialCache.DefaultNetworkCredentials; 
//request.Credentials = new NetworkCredential("name", "pass", "domain"); 
ServicePointManager.ServerCertificateValidationCallback = AcceptAllCertifications; 
HttpWebResponse response; 
using (response = (HttpWebResponse)request.GetResponse()) 
{ 
    //Do Something 
} 
+0

有什麼異常?你可以在SSL驗證回調委託方法中捕獲SSL問題並查看? –

回答

0

您的證書回調代碼看起來不正確,應該看:

ServicePointManager.ServerCertificateValidationCallback = 
    new RemoteCertificateValidationCallback(AcceptAllCertifications); 

我假設您對AcceptAllCertifications正確的方法簽名。此外,如果nextUrl是http,它將默認使用不安全的類,如果它是https,它將默認爲安全。

+0

回調是正確的。如果你把這個完整的陳述寫進來,你已經有了它,但不再需要,你可以做我擁有的簡短的手(我喜歡resharper)。也正如我所說的URL是https。當我將它改爲指向http的測試服務器時,它可以正常工作,但在這種情況下,它是https,失敗。 –

+0

我沒有ReSharper,很高興知道。你是否明確地將** https **放入參數中?另外,您應該嘗試修改用戶代理以聲明它是必需的。 – Greg

+0

網址明確表示https是yes。我應該如何修改客戶端? –