2010-09-22 129 views
1

嘿,我創建了一個HttpHandler從服務器上下載文件。看起來它沒有處理任何東西......我在ProcessRequest中放置了一個斷點,它永遠不會去那裏。HttpHandler下載txt文件(ASP.NET)?

public class DownloadHandler : IHttpHandler 
{ 
    public void ProcessRequest(HttpContext context) 
    { 
     //download stuff and break point 
    } 
} 

它永遠不會停在那裏,如上所述。我也在web.config中註冊它。

<add verb="*" path="????" type="DownloadHandler" /> 

我不確定該條目的路徑部分。我必須進入那裏?我正在下載txt文件,但URL不包含文件名,我不知何故必須將它傳遞給處理程序。我將如何做到這一點?會話可能?

謝謝

回答

2

你看過How to register Http Handlers嗎?你在使用IIS 6或7嗎?

路徑部分應該包含一個(部分)url,所以如果你的情況下你正在使用一個沒有文件名的靜態url,你應該把它放在那裏。您可以以不存在的資源名稱結束網址並將其映射到路徑

例如,網址是http://myserver.com/pages/downloadfiles
和路徑=「downloadfiles」

如果你這樣做POST,你可以把文件名中的一個隱藏字段,並在處理程序解壓縮。如果您使用的是GET,我不確定,可以交叉發佈視圖狀態或將文件名放入會話中,就像您所說的那樣。

你爲什麼不能把文件名放入網址的任何原因?

+0

第一個鏈接碰撞,解釋一切 – annakata 2010-09-22 08:06:19

0

處理程序的路徑需要是您嘗試處理的路徑 - 我知道的一個重言式位,但它非常簡單。無論您的網站上有什麼路徑(實際或更有可能是虛擬的),您都希望由此處理程序處理。

現在,除非在該路徑結束的文件類型通常由ASP.NET處理(如的.aspx,但的.asmx不一個 .txt)的ASP將永遠不會看到該請求,以便它去通過它的管道,並最終在你的處理程序。在這種情況下,您必須將IIS中的擴展類型綁定到ASP.NET。

至於識別處理程序應該回應的文件可以通過許多方式實現 - 我強烈建議避免會話或cookie或任何時間和隱含的內容。我會建議使用查詢字符串或表單值,基本上任何會顯示爲請求標頭的東西。

Fianlly,我不得不問爲什麼你爲此使用了一個處理程序--txt通常會正常工作,所以你在這裏實現了哪些附加功能?可能有更好的方法。