2011-08-04 45 views
3

我不知道是否有屬性(內置或一些開放源碼)我標記我的控制器,它具有特定的URL部分,我希望它用,如:如何在不創建新路由的情況下爲控制器設置自定義URL路徑?

[MagicUrlRoute("status")] 
public class InternalNameNotToBeRevealed : Controller 
{ 
    public ActionResult Show() 
    { 
    ... 
    } 
} 

這種方式,而不是「/InternalNameNotToBeRevealed/Show「是用戶看到的,它將是」/ status/Show「。這可能是挑剔的,但是我不得不使用控制器類名稱作爲官方URL路徑。

現在,我明白我可以在global.asax上創建一個自定義路由,但對於數百個控制器來說,這將是很多工作。

我發現這非常方便的庫來完成這一功能,但僅限於行動: http://maproutes.codeplex.com/releases/view/39888

我明白任何建議。

回答

2

你可以有一個映射列表,只需在一個循環中調用MapRoute來註冊所有的自定義映射。映射可以是字典,或者你甚至可以在App_Start上掃描一次所有的控制器,收集一個自定義屬性值,然後使用它們來構建映射。但是,我不確定這會對大量映射執行得如何。

如果您想要更高性能的機制,您必須創建自己的路由。您應該可以通過從System.Web.Routing.RouteBase繼承並重載GetRouteData和GetVirtualPath來完成此操作。構建RouteData時,只需提供現有的System.Web.Mvc.MvcRouteHandler作爲路由處理程序,並且只要路由數據包含「控制器」和「操作」值,它應該繼續沿着MVC管道向下。然後,使用RouteCollection上的Add方法添加路由。您可以在System.Web.Mvc.RouteCollectionExtensions中查看MapRoute瞭解MVC如何添加路由。

+0

謝謝。這似乎是要走的路,不要太難實施。 –

相關問題