如何将较低案例URL('问题/add_to_favorites/123')与ASP.NET MVC2中的下划线路由?
-
01-10-2019 - |
题
ASP.NET MVC 2控制器和操作使用UpperCamelcase。
由于某些原因,许多大网站(包括如此),使用小写(下划线)来控制URL中的控制器和操作。例子:
https://stackoverflow.com/questions
https://stackoverflow.com/users/377920/randomguy
http://www.reddit.com/ad_inq/
http://www.wired.com/special_multimedia/mobile/
etc.
我想知道如何完成。
默认路由器似乎是不敏感的,即。 stackoverflow.com/questions/ask
无问题将针对问题控制器的ask()方法。
但是,说我们想指导 questions/add_to_favorites
到问题控制器的addTofavorites()操作。
- 这是如何完成的?
- 现在需要使用吗
Html.ActionLink("add_to_favorites")
代替Html.ActionLink("AddToFavorites")
在html点中链接为questions/add_to_favorites
代替Questions/AddToFavorites
?
编辑:类似的帖子
支持下划线的一种方法是使用ActionName属性:
[ActionName("add_to_favorites")]
public ActionResult AddToFavorites() {
// ...
}
但是,这对控制器不起作用。也许,如果我们可以以某种方式从请求中删除所有下划线,然后才能到达路由机制,那么它将起作用。
解决方案
您可以手动添加自定义路线。这不是通用的解决方案,必须为每个控制器添加和分别操作。
routes.MapRoute(
"Web2.0 RoR style lowercase URLs with underscores",
"questions-foo/add_to_favorites",
new { controller = "Questions", action = "AddToFavorites" }
);
很酷的事情是,URL生成HTML助手方法无需修改。路由表用于路由传入请求 和 生成URL。所以,
Html.ActionLink("Add to favorites", "Questions", "AddToFavorites");
地图 /questions-foo/add_to_favorites
.
请注意原始 /Question/AddToFavorites
仍然像 /qUeStIoN/aDdtOfAvOrItEs
也 /qUeStIoNs-FOO/ADD_TO_FAVORITES
因为默认路由机制对病例不敏感。
不隶属于 StackOverflow