Asp.net-Mvc

如何在 ASP.NET MVC 的控制器中獲取路由名稱?

  • December 12, 2008

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 } );

有沒有辦法獲取路由名稱,例如上例中的“Debug”?我想在控制器的 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 操作中,我可以通過以下方式訪問路由名稱:

RouteData.DataTokens["RouteName"]

希望有幫助。

引用自:https://stackoverflow.com/questions/363211