我正在尝试ASP.NET MVC路由,当然偶然发现了一个问题。我有一个部分,/ Admin / Pages /,这也可以通过/ Pages /访问,它不应该。我能错过什么?
global.asax中的路由代码:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Pages", // Route name
"Admin/Pages/{action}/{id}", // URL with parameters
// Parameter defaults
new { controller = "Pages", action = "Index", id = "" }
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
// Parameter defaults
new { controller = "Home", action = "Index", id = "" }
);
}
谢谢!
答案 0 :(得分:6)
我建议在开头添加/ Pages /的显式路由。
问题在于它由默认路由处理并导出:
controller =“Pages” action =“索引” id =“”
与管理路线的参数完全相同。
答案 1 :(得分:6)
对于这样的路由问题,您应该尝试我的Route Debugger程序集(仅在测试中使用)。它可以帮助找出这些类型的问题。
P.S。如果您尝试保护Pages控制器,请确保使用[Authorize]属性。不要只依赖URL授权。
答案 2 :(得分:2)
您可以在默认规则中添加约束,以使{Controller}标记不能成为“页面”。
答案 3 :(得分:0)
您有第一个路由{action}令牌/参数,它与默认操作的设置相冲突。尝试更改路线中的参数名称,或删除默认操作名称。