我怎样才能得到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 } );
有没有办法获得路由名称,例如上面例子中的“debugging”? 我想在控制器的OnActionExecuting访问它,以便我可以在debugging时,在ViewData中设置的东西,例如,通过在/ debug / …前加一个URL。
不幸的是,路线名不存储在路线中。 它只是在内部使用MVC作为一个集合中的关键。 我认为这是你创buildHtmlHelper.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" } );
在我的控制器操作中,我可以通过以下方式访问路由名称:
RouteData.DataTokens["RouteName"]
希望有所帮助。
另一种解决scheme可以是使用解决schemeconfiguration:
protected override OnActionExecuting() { #if DEBUG // set up stuff in the ViewData #endif // continue }
应该不需要像这样引用路由名称 – 我想这就是为什么MVC使得这样做非常困难。
这不直接回答这个问题(如果你想迂腐); 然而,真正的目标似乎是获得一个路由的基础URL,给定一个路由名称。 所以,我就是这么做的:
我的路由在RouteConfig.cs
中定义为:
routes.MapRoute( name: "MyRoute", url: "Cont/Act/{blabla}", defaults: new { controller = "Cont", action = "Act"} );
并获取路线的基本url:
var myRoute = Url.RouteUrl("MyRoute", new { blabla = "blabla" }).Replace("blabla", "");
它给了我想要的路线的基地URL:
/Cont/Act/
希望这可以帮助。
另一种select – 使用MapRoute和string [] namespaces参数,然后你可以看到你的名字空间为RouteData.DataTokens["Namespaces"]