所以我读了很多答案,但我似乎无法理解我做错了什么。这是我正在使用的路线
routes.MapRoute("project",
"project/{id}/{slug}",
new { controller = "project", action = "index", id = UrlParameter.Optional, slug = "" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
这样可行,但它会使书籍控制器中的所有其他操作重定向到索引操作。我不希望这样,我只想让我的网址看起来像http://www.example.com/project/1/awesome-book,这有效,但我正在使用的所有其他操作,从该页面通过Ajax,指向索引操作而不是他们的正确的行动。
帮助?
答案 0 :(得分:3)
您可以为id参数添加整数约束。
routes.MapRoute("project",
"project/{id}/{slug}",
new { controller = "project", action = "index", id = UrlParameter.Optional, slug = "" },
new { id = @"\d+"});
此路由对id参数有约束。它是一个简单的正则表达式,用于检查id参数是否为整数。由于此路线高于默认路线,因此将首先检查该路线。 http://www.example.com/project/1/awesome-book将映射到Index操作。但是当您尝试进行其他操作时,您的第二段将包含操作名称。由于操作名称不是整数,因此默认路由将解析请求。