Asp.net-Mvc
如何在 ASP.NET MVC 的控制器中獲取路由名稱?
ASP.NET MVC 路由在映射時具有名稱:
routes.MapRoute( "Debug", // Route name -- how can I use this later???? "debug/{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = string.Empty } );有沒有辦法獲取路由名稱,例如上例中的“Debug”?我想在控制器的 OnActionExecuting 中訪問它,以便在調試時可以在 ViewData 中設置內容,例如,通過在 URL 前面加上 /debug/…
不幸的是,路線名稱未儲存在路線中。它只是在 MVC 內部用作集合中的鍵。我認為這是您在使用 HtmlHelper.RouteLink 創建連結時仍然可以使用的東西(也許在其他地方也是如此,不知道)。
無論如何,我也需要它,這就是我所做的:
public static class RouteCollectionExtensions { public static Route MapRouteWithName(this RouteCollection routes, string name, string url, object defaults, object constraints) { Route route = routes.MapRoute(name, url, defaults, constraints); route.DataTokens = new RouteValueDictionary(); route.DataTokens.Add("RouteName", name); return route; } }所以我可以註冊這樣的路線:
routes.MapRouteWithName( "myRouteName", "{controller}/{action}/{username}", new { controller = "Home", action = "List" } );在我的 Controller 操作中,我可以通過以下方式訪問路由名稱:
RouteData.DataTokens["RouteName"]希望有幫助。