ASP.NET MVC 4路由-控制器/id与控制器/action/id



我正在尝试向默认路由添加一个路由,这样我就可以同时使用两个url:

  1. http://www.mywebsite.com/users/create
  2. 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")路由。

最新更新