2013-02-21 117 views
0

我試圖從Web服務器使用WebClient對象下載「.aspx」文件並將其保存到文件系統,但它引發了「HTTP 500內部錯誤」 ,我想因爲服務器試圖呈現html併發送相同的內容而不是文件本身。從WebClient對象下載.aspx文件

var objWebClient = new WebClient();  
var remoteUrl = "someserverURL" + "default.aspx"; 
objWebClient.DownloadFile(remoteUrl, localPathToSave); 

嘗試添加HTTP頭,但我認爲他們可能不使用與請求對象從一個桌面系統,而不是一個瀏覽器之中,已經設置了服務器,爲所有內容在「應用程序/八位字節流」格式。

+0

當您使用真正的瀏覽器直接瀏覽該文件時,您會看到什麼?該頁面是否需要認證? – 2013-02-21 11:58:45

+0

@ShadowWizard抱歉忘了提及它下載所有其他文件類型,即「.txt,.gif,.jpg」等。不需要該頁面不需要驗證。基於瀏覽器的請求還服務器錯誤頁面「HTTP 500內部錯誤」 – 2013-02-21 12:03:12

+0

因此,這意味着頁面中有錯誤,您要下載什麼?你不能「下載」源代碼,它是黑客行爲。 – 2013-02-21 12:47:10

回答

1

你不能這樣做。

如果Web服務器設置正確,將不允許您直接下載aspx文件。

它下載所有其他文件,如jpegs和文本文件的原因是因爲Web服務器將愉快地提供這些文件類型,並允許它們被下載。

如果你試圖做的事情是可能的,那麼任何人都可以下載任何.net網站的aspx源文件,這將是非常不安全的。

你可以做的是從.aspx頁面獲取呈現的html內容並保存。

var webClient = new WebClient();  
var remoteUrl = "someserverURL" + "default.aspx"; 
byte[] data = webClient.DownloadData(remoteUrl); 
var utf8Encoding = new UTF8Encoding(); 
var html = utf8Encoding.GetString(data); 

//now you could save the html to a file 
+0

我認爲你是正確的,但服務器上的頁面只是一個頁面(另一個內容下載,而不是一個網站的一部分),我相信honece建議的代碼示例沒有工作,它仍然會拋出同樣的錯誤「 HTTP 500內部錯誤「 – 2013-02-21 13:14:18

+0

您可以在Web瀏覽器中查看呈現的http://someserverUrl/default.aspx的html嗎?如果可以的話,那麼你將無法以你嘗試的方式下載它。 – 2013-02-21 14:05:38

+0

假設你的網絡服務器是iis,如果你已經設置了asp.net,iis將不允許下載.aspx文件,即使這個頁面不是網站的一部分。 – 2013-02-21 14:13:43