Asp.net MVC路由模糊,同一页面的两条路径

时间:2008-09-16 08:31:31

标签: asp.net-mvc routing

我正在尝试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 个答案:

答案 0 :(得分:6)

我建议在开头添加/ Pages /的显式路由。

问题在于它由默认路由处理并导出:

controller =“Pages” action =“索引” id =“”

与管理路线的参数完全相同。

答案 1 :(得分:6)

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

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

答案 2 :(得分:2)

您可以在默认规则中添加约束,以使{Controller}标记不能成为“页面”。

答案 3 :(得分:0)

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