Asp.net
從 ASP.Net 頁面將 NetworkCredential 傳遞給 C# 中的 HttpWebRequest
我正在嘗試使用 HTTPWebRequest 訪問 Web 服務,但在傳遞憑據時遇到問題,請參見下面的程式碼。我可以看到在調試器中建構的憑據對象 nc 以及在 request.Credentials 的分配中,但是當我到達最後一行程式碼時,它會出現未經授權的錯誤消息。我已經讓我們的伺服器人員查看伺服器上的請求,並且沒有傳遞任何憑據。我對 Credentials 對像做錯了什麼,還是我需要做一些我沒有在這裡做的事情?
Uri requestUri = null; Uri.TryCreate("https://mywebserver/webpage"), UriKind.Absolute, out requestUri); HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create (requestUri); NetworkCredential nc = new NetworkCredential("user", "password"); request.Credentials = nc; request.Method = WebRequestMethods.Http.Get; HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Microsoft Premier Support 最後通過使用 CredentialCache 類添加憑據和“基本”授權幫助我解決了這個問題:
NetworkCredential nc = new NetworkCredential(GetSetting("username"), GetSetting("password")); CredentialCache cache = new CredentialCache(); cache.Add(requestUri, "Basic", nc); HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(requestUri);
NetworkCredentials 要麼非常不直覺,要麼不穩定,或者兩者兼而有之。無論如何,您可以通過完全繞過 NetworkCredentials 並使用此方法來解決問題(我發現,由 mark.michaelis.net 提供)
/* http://mark.michaelis.net/Blog/CallingWebServicesUsingBasicAuthentication.aspx */ byte[] credentialBuffer = new UTF8Encoding().GetBytes(username + ":" +password); req.Headers["Authorization"] ="Basic " + Convert.ToBase64String(credentialBuffer);因此,您正在做的是手動為您的 HttpWebRequest 創建一個標頭並插入內容,因為它會出現在基本身份驗證標頭中。奇蹟般有效。