Asp.net MVC路由不明确,同一页面的两条路径

时间:2020-03-05 18:55:23  来源:igfitidea点击:

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

    }

谢谢!

解决方案

回答

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

问题在于它正在由默认路由处理并派生:

控制器="页面"
行动="索引"
id =""

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

回答

我们可以向默认规则添加约束,以使{Controller}标记不能为" Pages"。

回答

第一条路线{action}令牌/参数与默认操作的设置发生冲突。尝试更改路径中的参数名称,或者删除默认操作名称。

回答

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

P.S.如果要保护Pages控制器的安全,请确保使用[Authorize]属性。不要仅仅依靠URL授权。