[英]MVC4's mapRoute URL — {controller}/{action} vs Controller/{action}. What's the difference?
我最近因為這兩條MVC4路線顯然功能不同而受到灼傷。 我想知道是否有人能突出顯示正在發生的事情,所以我可以更好地理解。
routes.MapRoute(
"post-User",
"User",
new { controller = "User", action = "create" },
new { httpMethod = new HttpMethodConstraint("POST") }
);
routes.MapRoute(
"post-User",
"{controller}",
new { controller = "User", action = "create" },
new { httpMethod = new HttpMethodConstraint("POST") }
);
我認為{controller}位是占位符,並且在下一行中說控制器=“用戶”將使這兩個語句等效。 顯然使用{controller}設置所有路由的默認值?
您認為{controller}
子字符串充當控制器名稱的占位符是正確的。 controller, but default to the User
controller where no controller is specified: 考慮到這一點,然后,以下路由將匹配控制器,但默認為沒有指定控制器的User
控制器:
routes.MapRoute(
"post-User",
"{controller}",
new { controller = "User", action = "create" },
new { httpMethod = new HttpMethodConstraint("POST") }
);
但是,以下內容將匹配路由User
和 - 因為無法指定控制器 - 將始終路由到User
控制器:
routes.MapRoute(
"post-User",
"User",
new { controller = "User", action = "create" },
new { httpMethod = new HttpMethodConstraint("POST") }
);
在這種情況下,差異是沒有意義的,因為您所做的只是強制路由User
映射到控制器User
,這正是您的第一個路徑中發生的事情。
但是,請考慮以下事項:
routes.MapRoute(
"post-User",
"User/{action}",
new { controller = "User", action = "MyDefaultAction" },
new { httpMethod = new HttpMethodConstraint("POST") }
);
routes.MapRoute(
"foo",
"{controller}/{action}",
new { controller = "User", action = "Index" },
new { httpMethod = new HttpMethodConstraint("POST") }
);
現在,您的頂部路由將匹配對User
控制器的請求,並指定了可選操作,並且默認為MyDefaultAction
。 對任何其他控制器的請求將與第一個路由不匹配 - 因為路由不以常量字符串User
開頭 - 並且將默認返回到第二個路由(foo)。 同樣,行動是可選的; 但是,現在,與對User
控制器的請求不同,其他控制器的默認操作將是“ Index
操作。
所以現在......
.../User
默認為MyDefaultAction
操作。
.../SomeOtherController
默認為Index
操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.