Asp.net-Mvc
ASP.NET MVC 4 路由 - 控制器/id 與控制器/動作/id
我正在嘗試將路由添加到預設路由,以便兩個 url 都可以正常工作:
http://www.mywebsite.com/users/createhttp://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(因為第二個參數需要是一個數字),因此將落入下一個(“預設”)路由。