2013-08-02 47 views
1

我們有遺留代碼來維護和解決特定客戶定製問題,我們希望將呼叫路由到某些文件到其他文件。也就是說,當應用程序調用特定的ASPX時,它最終會碰到另一個ASPX。無法在ASP.NET WebForms中路由靜態文件

如果您撥打:

www.foo.com/admin/admin.aspx 

實際上,它將擊中:

www.foo.com/customizations/customer1/admin/admin.aspx 

這不是一個很好的設計,但是這是遺留代碼。我們只是想解決這個問題。

我們使用System.Web.Routing框架來解決它。當您將RouteExistingFiles設置爲true時,此工作正常,但靜態文件(CSS,JavaScript和圖像)除外。 當我第一次嘗試,它檢索這個錯誤:

There is no build provider register for the extension '.css'.

所以,我沒有在註冊爲.css擴展web.config文件版本提供。我使用這個構建提供者:PageBuilderProvider,因爲有人在互聯網上推薦它。

它的工作原理!但是CSS內容類型爲text\html

我該如何做到這一點?

TL; DR:我想在ASP.NET Web窗體中使用路由來調用特定的CSS文件來實際檢索另一個CSS文件。客戶需要進行定製。

回答

1

嘗試編碼一個HttpHandler。我不得不做類似的事情,但對於PDF文件,我編寫了一個自定義的HttpHandler - 非常好。您甚至可以在HttpHandler代碼中設置內容類型,並在web.config中使用處理程序將使用的模式匹配路徑。如果路徑未指向現有文件,您也可以在web.config中將其配置爲不執行,例如所以404返回時不必在處理程序本身編寫代碼。我無法發佈我的代碼(VB.NET)ATM,因爲我正在使用平板電腦,但谷歌搜索教程。您也可能需要使用TransmitFile函數來實際寫出css文件。它是一個Web表單項目或網站?如果它的網站有一個在web.config中註冊HttpHandler的特殊方法。

+0

如果你喜歡我可以發佈一個鏈接到我跟着的教程。 –

+0

對不起,您的迴應是,但我確實需要靜態內容的當前網址才能繼續工作。我只需要將它們路由到不同的靜態文件。 ASHX處理程序會要求我更改URLS。不管怎樣,謝謝你。 –

+0

沒有,當我做它的網址沒有改變,你不需要一個ASHX你可以創建一個繼承IHttpHandler的類,我認爲。 –