映射时,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/

10-13 00:02
查看更多