Asp.net-Mvc

ASP.NET MVC 4 路由 - 控制器/id 與控制器/動作/id

  • August 3, 2013

我正在嘗試將路由添加到預設路由,以便兩個 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 }
);

並確保“詳細資訊”操作中的“id”參數是一個 int:

// "users" controller
public ActionResult books(int id)
{
   // ...
}

這樣,“Books”路由將不會擷取類似 URL /users/create(因為第二個參數需要是一個數字),因此將落入下一個(“預設”)路由。

引用自:https://stackoverflow.com/questions/18038284