2011-04-06 172 views
12

我有一個ASP.NET應用程序,我試圖將以前訪問的本地aspx頁面輸出到html(它的報告,我想存儲一個靜態html副本它作爲一個檔案)。我存儲在本地網頁的URL以:WebRequest.GetResponse()拋出錯誤401:未授權

Session["SummaryURI"] = Request.Url.AbsoluteUri; 

,然後在接下來的頁面我檢索它:

string url = Session["SummaryURI"].ToString(); 

url = url.Replace("static=false", "static=true"); 
//MessageLabel.Text = url; 

//CREATE THE NEW FILE 
WebRequest req = WebRequest.Create(url); 
WebResponse res = req.GetResponse(); 

的部分req.GetResponse()在這裏我得到我的錯誤(401 Unauthorized)。

我需要在IIS中配置一些東西來允許這個嗎?

我需要編輯文件權限嗎?

感謝您的幫助

順便說這工作正常我本地IIS,但不是我的測試服務器上。

+0

檢查了這一點http://social.technet.microsoft.com/Forums/ en/winserversecurity/thread/c9239a89-fbee-4adc-b72f-7a6a9648331f – Aristos 2011-04-06 20:46:02

回答

3

截至目前我沒有訪問IIS設置,所以我不能讓Anonymous Authentication這是非常可能的,爲什麼Cyber​​nate的回答並沒有爲我工作。然而,我確實發現了一種更簡單的方法。我發現我可以用Server.Execute做同樣的事情,而不是使用WebRequest。下面是我的新的解決方案:

string strHTML = String.Empty; 
using (var sw = new StringWriter()) 
{ 
    Server.Execute([path-to-local-aspx], sw); 
    strHTML = sw.ToString(); 
} 

string relativeReportPath = [relative-path-to-new-html-file]; 

using (StreamWriter writer = File.CreateText(Server.MapPath(relativeReportPath))) 
{ 
    writer.WriteLine(strHTML); 
    MessageLabel.Text = "Your report is ready. Click Close to close the window."; 
} 
+0

我剛剛注意到我得到了一些反對票。顯然這是舊的,但有人可以解釋爲什麼他們downvoted?謝謝。 – Daniel 2013-07-11 22:39:59

+0

我想你的解決方案對你的情況很好,我們中的大多數人最終會在這裏尋找一種解決方案,發現@丹尼爾解決方案是正確的。無論如何,我沒有投下你的票,只是猜測爲什麼有人會投票支持你。 – Esen 2016-10-19 12:39:51

9

我認爲這個問題是因爲在測試IIS服務器上的身份驗證。 兩個選項:

1)在測試IIS服務器上爲站點啓用「匿名身份驗證」。

2)(推薦) 在向測試服務器提出請求之前,請使用下面的代碼模板,其中包含可以通過測試服務器進行身份驗證的正確用戶名/密碼/域信息。

System.Net.NetworkCredential netCredential = 
     new System.Net.NetworkCredential("<USER_NAME>", "<PASSWORD>", "<DOMAIN>"); 
req.Credentials = netCredential; 
+1

對不起,花了這麼長時間來回應,我剛剛回到這個錯誤。如果我們使用NT身份驗證,這將工作嗎?我嘗試傳遞自己的用戶名和密碼 - 但仍然無法正常工作。 – Daniel 2011-04-12 00:50:55

+0

我認爲重要的是要指出#2的上面的代碼可以很好地處理一個警告。確保在上面指定的行後沒有「UseDefaultCredientials」屬性(例如UseDefaultCredientials = false;)。這樣做會有效地「清除」你剛剛設置的信用卡。 – Bham503 2014-10-02 17:45:42

18

如果您不能啓用匿名身份驗證,嘗試添加這給WebRequest:

req.UseDefaultCredentials = true; 
req.PreAuthenticate = true; 
req.Credentials = CredentialCache.DefaultCredentials; 
+0

像魅力一樣工作,請注意使用緩存中的默認憑據,一些額外的信息對於原因很有幫助。 – Niklas 2017-08-02 07:09:54