2012-04-27 22 views
5

我也許希望從ASP.NET太多,但在Apache中是微不足道的重寫URL請求等等類似: http://mysite/myfolder/mypage/niceurlparameter 實際上設法提供靜態頁面http://mysite/mypage.html此Global.asax路由設置有什麼問題?

我該怎麼做,在Global.asax中?

我已經試過這樣:

RouteTable.Routes.MapPageRoute("Static HTML", "myfolder/{page}/*", "~/myfolder/{page}.html"); 

但它一直返回404,當我要求http://mysite/myfolder/mypage/niceurlparameter

然而,這個工程:

RouteTable.Routes.MapPageRoute("Static HTML", "myfolder/{page}.html/*", "~/myfolder/{page}.html"); 

所以請求http://mysite/myfolder/mypage.html/niceurlparameter當我得到的mypage.html。

我只想擺脫我的網址中的「.html」部分。我錯過了什麼?

更新: 出於某種原因,在前一種情況下,'*'通配符未被接受。

更改爲:

RouteTable.Routes.MapPageRoute("Static HTML", "myfolder/{page}/{whatever}", "~/myfolder/{page}.html"); 

出現路由到HTML頁面的請求,但後來我得到的錯誤:

There is no build provider registered for the extension '.html'. 

爲什麼在世界上它只是在前者的情況下工作(與HTML中的URL),而不是當HTML被遺漏了嗎?

+0

您運行的是哪個版本的IIS?我似乎記得IIS 6不會允許這個開箱即用,您需要添加通配符映射。 – 2012-04-27 08:58:14

+1

看到這個問題的可能的解決方案:http://stackoverflow.com/q/9918066/25727 – Jan 2012-04-27 09:01:07

+0

IIS是v7.5。建議的鏈接有幫助。謝謝 – tishma 2012-04-27 11:11:14

回答

3

There is no build provider registered for the extension '.html'

您會收到此錯誤消息,因爲應直接由IIS處理靜態html文件。但是,在你的情況下,ASP.NET MVC框架試圖處理.html類型的文件,但它不能。

所以,如果你認爲這是你需要做的,你將不得不建立一個新的提供者,並在web.config文件中註冊。看看這個

Custom file extensions for ASP.NET - help needed!

你可以簡單地改變你的靜態HTML內容.aspx文件。一個簡單的複製和粘貼將完成這項工作,它應該工作正常。它會知道如何處理文件類型。

+1

我接受這個,因爲它實際上解決了這個問題。但是,我永遠不會寫任何自定義,最終將允許Web服務器提供靜態文件(!?!) URL重寫是一種更好的途徑採取,如果你想要靜態文件重定向。IIS 7.5和URL重寫2模塊是要走的路。 – tishma 2012-04-28 11:42:32