这是我在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,它仍然可以很好地运作。谁能告诉我这有什么问题?
答案 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
网址。