2009-12-29 15 views
3

請原諒令人迷惑的標題;)ASP.NET MVC:如何「理解」遺留URL但不寫它們?

我們已經構建了一個ASP.NET MVC應用程序來替換我們的「舊」ASP.NET webforms怪物。我們仍然希望支持那裏使用的一些舊網址,因爲這些網址可能還會在電子郵件等等的某個地方出現。

例如:我們的舊系統使用URL〜/ Password.aspx,新MVC系統中的URL是〜/ Home/Password。

爲了支持這些舊網址,我們只需將它們添加到路由表,就像

routes.MapRoute(
     "Password", 
     "Password.aspx", 
     new { 
      controller = "Home", 
      action = "Password", 
      id = "" 
     } 
    ); 

這個偉大的工程,但每當我們使用Url.Action(「密碼」,「家」)在我們的代碼它會生成舊的URL(「〜/ Password.aspx」而不是「〜/ Home/Password」)。由於我們想慢慢淘汰舊的URL,如果MVC路由仍舊「理解」舊的URL,但只使用/寫入新的URL,那將會很好。

有沒有辦法做到這一點?

回答

5

將新路由放在路由表上的舊路由之上。路線越高,它的優先級越高:

routes.MapRoute(
     "PasswordNew", 
     "Home/Password", 
     new {controller = "Home", 
      action = "Password", 
      id = "" 
     } 
    ); 

routes.MapRoute(
     "Password", 
     "Password.aspx", 
     new { 
      controller = "Home", 
      action = "Password", 
      id = "" 
     } 
    ); 
+7

我也建議將舊URL映射到*重定向到新URL的內容。這也可以幫助搜索引擎更好地索引您的網站。 – Levi 2009-12-29 18:13:25

+0

+1 - 好主意。 – jchapa 2009-12-29 18:17:17

+0

Argl,這麼簡單;我怎麼沒有想到我自己;) 非常感謝,它不適用於我們的情況下的所有URL /路線(有些非常複雜),但對一些。 – 2009-12-30 13:11:24

相關問題