【问题标题】:Asp.net MVC routing ambiguous, two paths for same pageAsp.net MVC路由不明确,同一页面的两条路径
【发布时间】:2010-09-09 09:08:20
【问题描述】:

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

    }

谢谢!

【问题讨论】:

    标签: asp.net-mvc routing


    【解决方案1】:

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

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

    controller = "页面" 动作=“索引” id = ""

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 这应该是答案,因为目的是保护 PagesController 的 Index 操作方法。
      【解决方案3】:

      您可以在默认规则中添加一个约束,这样 {Controller} 标记就不能是“Pages”。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2017-05-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-05
          • 1970-01-01
          相关资源
          最近更新 更多