2012-08-09 45 views
0

我正在使用MVC 3.因爲我們都知道MVC根據控制器中的操作方法名稱設置URL,但我需要稍作修改。如何在MVC 3中重寫URL?

爲了安全起見,我不想在URL中顯示我的操作方法的名稱。因此,如果我在主控制器中使用索引方法,則URL將如下所示:www.server/home/index但我想在瀏覽器中顯示www.server/home/test。我可以通過使用[ActionName]屬性來完成此操作,但是還有其他方法嗎?

我可以爲此使用自定義路由處理程序嗎?

+1

隱藏方法名稱的安全目的是什麼? – AlexC 2012-08-09 08:25:51

+0

取決於您的需求。這將「測試」指的是?每個控制器有多個動作?你可以使用路由來實現這個目標,但是如果這個名字是針對每個動作(和自定義)的,那麼你將不得不爲每個動作添加一個對我來說似乎毫無意義的路由(在這種情況下[ActionName]聽起來更可行) 。如果「測試」是特定的東西,你可以檢索或找出方法,那麼也許路線或擴展控制器可能是一個解決方案。讓我知道你的目標是什麼,我會幫你的:) – Pluc 2012-08-09 11:23:07

+0

現在我只需要做一個動作方法,但通過使用自定義路由處理程序。 @ Pluc – 2012-08-09 11:50:47

回答

0

作爲使用ActionName的替代方案,您可以定義自定義路線並將其引導至您想要的任何控制器和動作。例如:

routes.MapRoute("home/test", "home/test/{id}", 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }); 

將採取類似/home/test/home/test/42和它們路由到主控制器的索引操作路徑。

如果您不需要它,您也可以忽略{id}部分。例如:

routes.MapRoute("home/test", "home/test", 
    new { controller = "Home", action = "Index" }); 

將只需要/home/test

這也是我在保持大寫字母控制器和動作名稱的同時實現小寫URL的方式。我只是硬編碼我所有的路線。

+0

這將適用於小型網站,但這不會成爲維護噩夢? – AlexC 2012-08-09 08:26:54

+0

我會檢查並顯示給我的老師。如果他批准,那麼我會讓你知道,或者如果他建議除此之外的任何內容,我也會分享。感謝您的關注。 – 2012-08-09 11:57:11

+0

@AlexC可能但不一定。這取決於您在網站中擁有多少控制器和操作,以及它們多久更換一次。改變路線比重新命名控制器或動作更容易。 – jordanbtucker 2012-08-09 14:44:04