Asp.net

從 ASP.Net 頁面將 NetworkCredential 傳遞給 C# 中的 HttpWebRequest

  • August 15, 2019

我正在嘗試使用 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 創建一個標頭並插入內容,因為它會出現在基本身份驗證標頭中。奇蹟般有效。

引用自:https://stackoverflow.com/questions/1683398