我怎样才能得到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"]