我正在尝试向默认路由添加一个路由,这样我就可以同时使用两个url:
http://www.mywebsite.com/users/create
http://www.mywebsite.com/users/1
这将使第一条路线发挥作用:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "users", action = "Index", id = UrlParameter.Optional }
);
然而,第二条路线显然行不通。
这将使第二条路线可行,但将打破第一条路线:
routes.MapRoute(
name: "Book",
url: "books/{id}",
defaults: new { controller = "users", action = "Details" }
);
如何将两种路由配置组合起来,使两个URL都能工作?如果SO上已经有这样的问题,我很抱歉,我什么都找不到。
关键是要把更具体的路线放在首位。所以,把"书本"路线放在首位编辑我想您还需要一个约束,只允许数字与该路线的"id"部分匹配结束编辑
routes.MapRoute(
name: "Book",
url: "books/{id}",
defaults: new { controller = "users", action = "Details" },
constraints: new { id = @"d+" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "users", action = "Index", id = UrlParameter.Optional }
);
并确保"Details"操作中的"id"参数是int:
// "users" controller
public ActionResult books(int id)
{
// ...
}
这样,"Books"路由将不会捕获像/users/create
这样的URL(因为第二个参数要求是数字),因此将进入下一个("Default")路由。