2009-11-17 114 views
3

在我的研究中,我發現了兩種方法來完成它們。ASP.NET友好網址

這兩個都需要對Global.Asax中的Application_BeginRequest過程進行修改,在那裏您將運行代碼來執行實際的URL映射(我的數據庫視圖包含所有友好的URL及其映射的「真實」URL) 。現在的訣竅是讓你的請求在沒有aspx擴展名的情況下通過.NET引擎運行。我發現的兩種方法是:

  1. 通過帶有通配符應用程序擴展映射的.NET引擎運行所有內容。

  2. 創建一個自定義aspx錯誤頁面並告訴IIS發送404到它。

現在,這裏是我的問題:

沒有任何理由的其中一個比另一個好做?

在我的開發者服務器上玩耍時,我注意到關於#1的第一件事就是它的frontpage擴展混淆了,沒有什麼大不了的,但這就是我習慣連接到我的網站的方式。我與#1的另一個問題是,儘管我的託管公司對我(我是他們最大的客戶)寬容,並且會考慮這樣做,但他們對可能存在的任何安全風險保持警惕。

`#2很好,但我只是覺得它不如#1有效。我只是在妄想?

感謝

回答

3

我以前也用過#2。

這是更有效,因爲不像通配符映射,ASP.NET引擎不需要像圖像文件,靜態HTML,CSS,Javascript代碼等

另外,如果所有的額外資源,以「進程」請求你不介意。你可以使用URL中的.aspx擴展名:http://myweb/app/idx.aspx/products/1 - 工作正常。

話雖如此,真正的解決方案是使用IIS 7,其中ASP.NET運行時是IIS HTTP模塊堆棧的完全成熟部分。

+0

謝謝,這是沒有所有其他資源文件通過引擎運行的意義。 我原本在我的網址中有aspx擴展名,但想清除它。 我的網站是在IIS 6上,但我會更多地關注IIS 7的東西。 – 2009-11-17 14:02:03

2

如果您有最新版本的IIS有重寫模塊 - 參看here。如果沒有免費的第三方二進制文件,你可以使用舊的IIS(即版本6) - 我已經使用一個從.ini文件讀取重寫規則並支持正則表達式,但我不記得它的名稱抱歉(它可能是this) 。我會推薦這與404頁面便宜。

1

您是否檢查過ASP .Net MVC Framework?使用該框架,您的所有URL都會自動映射到可執行任何所需操作的控制器(包括重定向到其他URL或控制器)。您還可以使用自定義參數設置自定義路線。如果你還沒有看到它,也許它會值得看。

1

您必須通過ASP.NET引擎映射所有請求。 IIS處理請求的方式是通過文件擴展名。默認情況下,它僅處理僅由ASP.NET處理的.aspx,.ashx等擴展。原因是它增加了處理請求的開銷。 我寫了如何使用IIS 6 a回來,http://professionalaspnet.com/archive/2007/07/27/Configure-IIS-for-Wildcard-Extensions-in-ASP.NET.aspx

你是對的從數據庫做你的映射。 RegEx重寫,就像在MVC中使用的那樣。這是因爲它或多或少會迫使您將主鍵放在URL中,並且沒有很好的方法來映射URL中不允許的字符,如'。