asp.net-mvc - 如何获取 ASP.NET MVC Controller 中的路由名称?

标签 asp.net-mvc model-view-controller routes

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/... 前缀

最佳答案

不幸的是,路线名称未存储在 route 。它仅在 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"]

关于asp.net-mvc - 如何获取 ASP.NET MVC Controller 中的路由名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/363211/

相关文章:

jquery - 如何使用backbone.js保存集合

c# - ASP.NET MVC 中的多个默认路由到不同的默认操作

c# - 在 MVC 中从同步调用异步而没有等待时,TPL 任务死锁

c# - ASP.NET 数据注释正则表达式 : Don't allow following characters in Name:\,/, :, *, ;,

asp.net - 异步/等待和异步 Controller ?

c# - ASP.NET MVC POST 中的模型绑定(bind) IEnumerable?

javascript - 我的 JavaScript 数组没有长度

javascript - Expressjs MVC 在路由器中无法让 listAll() 从 mongoose 返回数据

mysql - 简单的服务器处理路由并给出错误nodejs mysql

asp.net-mvc - stackoverflow URL 重写