我正在尝试将路由添加到默认路由,以便我有两个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上已经存在这样的问题我很抱歉,我无法找到任何东西。
答案 0 :(得分:34)
关键是首先提出更具体的路线。所以首先把“预订”路线。 编辑我猜你还需要一个约束,只允许数字匹配此路线的“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 }
);
确保“详细信息”操作中的“id”参数为int:
// "users" controller
public ActionResult books(int id)
{
// ...
}
这样,“Books”路由将不会捕获像/users/create
这样的URL(因为第二个参数被重新命名为一个数字),因此将落到下一个(“Default”)路由。