2017-10-04 330 views
2

請原諒我,如果我看起來好像我在這裏做一些愚蠢的事情。我已經嘗試瀏覽其他堆棧溢出問題以解決我的問題,但似乎沒有獲得任何地方。C#HttpWebRequest響應錯誤(401)

我正在研究一個dotnet核心MVC應用程序,並希望從遠程服務器返回一些數據。我正在使用HttpWebRequest類。

在提琴手我執行以下使用作曲家。

enter image description here

正如你可以看到它的頭中具有通過兩個cookie簡單的GET請求。

這很好,並返回我正是我需要的東西。

然後我撰寫了我的請求在DOTNET世界如下:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 

request.CookieContainer = new CookieContainer(); 

request.CookieContainer.Add(new Cookie("name", "value", "/", "localhost")); 

(不包括對問題的目的,第二個cookie)

然後我打電話:

var httpResponse = (HttpWebResponse)request.GetResponse(); 

然而,接收'遠程服務器返回錯誤:(401)未授權'

任何想法我在這裏做錯了嗎?我試圖添加下面的代碼行來進行測試,但仍然沒有運氣。

request.ServerCertificateValidationCallback = delegate { return true; }; 

所有答案讚賞。另外,正如我所提到的,我不是專家,所以我可以做一些愚蠢的事情!

詹姆斯

+2

你可以使用提琴手查看從C#代碼生成的請求嗎?與你在小提琴手製作的作品請求有什麼不同? – Alfredo

+2

您的請求url是否會轉到localhost?您已將Cookie設置爲僅傳遞到本地域。 –

+0

嗨@Ed T感謝您的評論。我做了你所說的,並將其更改爲正確的域名並且......賓果遊戲!有效。應該發現一個!把它變成答案,我會投票並將其標記爲答案。 James –

回答

1

Cookie構造函數時,設置cookie的域名爲「本地主機」,這意味着它只會被傳遞到請求到本地主機域名。它應該設置爲您實際發送請求的域。

2

我覺得你的請求被默認爲POST,但你的提琴手例子做一個GET。

嘗試增加:

  request.Method = "GET"; 
      request.ContentType = "text/xml; encoding='utf-8'"; 
+2

嗨@Scrappydog只是出於興趣我也試過這個,但它沒有區別。該請求仍然作爲GET處理。我想盡管明確表達這一點並沒有什麼壞處,所以我投了票。 –