2008-09-16 123 views
5

我尝试了ASP.NET MVC路由,当然有偶然发现一个问题。我有一个部分/ Admin/Pages /,这也可以通过/ Pages /访问,它不应该访问它。我可能会错过什么?Asp.net MVC路由不明确,两个路径相同的页

在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 = "" } 
     ); 

    } 

谢谢!

回答

6

我建议在开始时为/ Pages /添加显式路由。

的问题是,它是由所述默认路由处理,并导出:

控制器=“页数” 行动=“索引” ID =“”

其是完全一样的参数为您的管理路线。

2

您可以将约束添加到默认规则,以便{Controller}标记不能为“Pages”。

0

您首先有{action}标记/参数与默认行为的设置发生冲突。尝试更改路线中的参数名称,或删除默认操作名称。

6

对于这样的路由问题,您应该试试我的Route Debugger程序集(仅在测试中使用)。它可以帮助找出这些类型的问题。

P.S.如果您尝试保护Pages控制器,请确保使用[Authorize]属性。不要只依赖URL授权。

+0

这应该是答案,因为意图是保护PagesController的Index操作方法。 – 2014-09-23 05:36:24