我正在使用以下代码从RouteData获取控制器/操作信息
RouteData route = RouteTable.Routes.GetRouteData(httpContext);
string controller = route.GetRequiredString("controller");
string action = route.GetRequiredString("action");
但是如果Global.asax.cs中的路由映射没有“controller”的部分,我应该更改字符串“controller”,如下所示:
routes.MapRoute(
"Default", // Route name
"{NOTCONTROLLER}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
谢谢!
答案 0 :(得分:2)
没有。您的路线数据将始终具有“控制器”键。如果你看路线:
routes.MapRoute(
"Default", // Route name
"{NOTCONTROLLER}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
RouteTable.Routes.GetRouteData
返回的内容来自controller = "Home"
,而不是来自"{NOTCONTROLLER}/{action}/{id}"
。注册路径时,括号中的任何内容都会映射到操作中具有相同名称的参数,但{controller}
和{action}
除外,它们指定控制器或动作。更详细地阅读MVC路由{。{3}}。
要玩弄路线并了解它们的工作原理,请玩here。如果您陷入无法弄清楚路线如何运作的情况,这是非常宝贵的。