网址路由无法按预期工作

时间:2011-08-30 07:53:07

标签: c# asp.net-mvc asp.net-mvc-3

这是我在global.asax中的RegisterRoutes方法:

 public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

            routes.MapRoute("ListBooks",
              "Home/Books/{id}",
              new { controller = "Home", action = "Books" },
              new { id = @"\d{2}" });


        }

正如您在约束中所看到的,我已经指定id必须是2位数的强制。但是已经明确指出了这一点,即使我输入的只是一个数字书籍ID,它仍然可以很好地运作。谁能告诉我这有什么问题?

3 个答案:

答案 0 :(得分:1)

您的默认路线应放在其他路线之后,否则优先。

答案 1 :(得分:0)

试试这个

    public static void RegisterRoutes(RouteCollection routes) 
    { 
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 


        routes.MapRoute("ListBooks", 
          "Home/Books/{id}", 
          new { controller = "Home", action = "Books" }, 
          new { id = @"\d{2}" }); 

           routes.MapRoute( 
            "Default", // Route name 
            "{controller}/{action}/{id}", // URL with parameters 
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
        ); 

    } 

答案 2 :(得分:0)

您的约束按预期工作,并且网址与“ListBooks”路由不匹配。但是,如果你仔细观察“Default”路线,它与“ListBooks”路径具有相同的签名 - 但没有约束。因此“Default”处理该单个数字id网址。在这种情况下,您的路线顺序无关紧要,因为“Default”无论如何都会捕获单个数字id网址。