2011-08-21 62 views
2

使用ASP.NET MVC3,網站處於測試階段,客戶決定重命名其中一個控制器。處理重命名控制器的最佳方法

http://domain.com/foo[/*] -> http://domain.com/bar[/*] 

什麼是最直接的方式來處理重定向,所以我不打破任何foo書籤?

回答

2

保留舊的控制器,以便舊的URL仍然有效。

或者添加重寫規則。喜歡的東西:

domain.com/foo(/[_0-9a-z-]+) 

到:

domain.com/bar{R:1} 

在IIS URL重寫 http://technet.microsoft.com/en-us/library/ee215194(WS.10).aspx http://www.iis.net/download/URLRewrite

如果您正在使用MVC.NET你可能已經安裝了URL Rewrite。

+0

重寫規則在哪裏? – Thomas

+0

看我的編輯。你通過IIS來完成。 – codenheim

+0

和32bitkid提到的一樣,你可以用MVC.NET路由重寫。 – codenheim

0

如果你能想出如何在IIS中做到這一點,302重定向就可以了。這個截圖顯示它是not that arduous。或者,如果您使用的是Castle Windsor,則可能需要register an interceptor,它使用HttpResponse.Redirect()

+0

給IIS一個鏡頭,儘管聽起來像301更準確。 – Thomas

+0

謝謝,但您寄給我的方向不允許我需要的靈活性。 – Thomas

2

另一種方法是在Global.asax.cs中爲舊控制器名稱註冊一個特定路由。

routes.MapRoute(
    "RenamedController",            // Route name 
    "[OldControllerName]/{action}/{id}",       // URL with parameters 
    new { controller = "[NewControllerName]", action = "Index", id = "" } // Parameter defaults 
); 

在標準默認路由之前添加,並且您的新控制器應該同時響應新名稱和新名稱。

+0

試圖這樣做,因爲我討厭IIS :)請問,這樣重定向的id如寫入,或砍掉它? – Thomas

+0

那麼,這種方法並不是像兩條路線一樣重定向到同一個控制器。看看這個URL以獲取更好的文檔:http://www.asp.net/mvc/tutorials/asp-net-mvc-routing-overview-cs –

+0

哦,有趣的是,它實際上保留了舊的url而不是重定向。好了,讓我學習MapRoute,但我不認爲這滿足了我的要求。 – Thomas