2011-11-02 25 views
0

我有一個ASP.NET Web項目(除其他外)提供一些靜態文件。默認情況下,框架假定所有文件路徑都是相對於Web項目的位置。但是,我想要從Web.config中的自定義設置加載實際的根目錄(例如"C:\MyStaticFiles\")。更改StaticFileHandler的文件根

有什麼方法可以改變StaticFileHandler認爲是服務器根目錄嗎? 如果沒有,是否有一個簡單的方法來實現IHttpHandler將做出這種改變,並將其餘的工作交給常規的StaticFileHandler

回答

0

我認爲,從性能的角度考慮,爲靜態資源創建不同的路徑映射並不是一個好主意。如果它們位於網站文件夾中,則它們可以由IIS直接提供,而無需任何ASP.NET處理。

1

由於性能方面的原因,最好使用URL重寫而不是亂七八糟的HttpHandler。 StaticFileHandler不如IIS快。你自己的處理程序比StaticFileHandler速度慢10倍,除非你是一個非常優秀的工程師,否則它可能會泄漏(或不正確的內存)。

您可以在HttpModule或HttpApplication的BeginRequest事件(或PostAuthorizeEvent,如果您使用URL授權)中調用context.RewritePath對選定文件類型進行重寫。

+0

我該如何使用URL重寫來更改從中提供文件的根文件夾?該文件夾位於Web項目文件夾之外。 'context.RewritePath'仍然採用虛擬路徑 - 如果嘗試給它一個絕對路徑,它會引發錯誤。是否有類似的東西可以讓我改變絕對的物理路徑? – kpozin

+0

不,您必須將IIS虛擬文件夾配置爲物理路徑,然後使用RewritePath將IIS指向那裏。對不起,我忘了提到這一點。 –