5

我正在尝试 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 = "" }  
        );

    }

谢谢!

4

4 回答 4

7

我建议在开头为 /Pages/ 添加一个显式路由。

问题是它由默认路由处理并派生:

控制器 =“页面”操作 =“索引”ID =“”

这与您的 Admin 路由的参数完全相同。

于 2008-09-16T08:36:06.100 回答
7

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

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

于 2008-09-18T16:02:15.293 回答
2

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

于 2008-09-16T08:53:07.633 回答
0

您的第一个路由 {action} 令牌/参数与默认操作的设置相冲突。尝试更改路由中的参数名称,或删除默认操作名称。

于 2008-09-17T07:02:18.703 回答