映射时,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 } );
有没有办法获取路线名称,例如上面例子中的“调试”?我想在 Controller 的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 Action 中,我可以使用以下方式访问路由名称:
RouteData.DataTokens["RouteName"]
希望能有所帮助。
关于asp.net-mvc - 如何在ASP.NET MVC的 Controller 中获取路由名称?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/363211/