如何将较低案例URL('问题/add_to_favorites/123')与ASP.NET MVC2中的下划线路由?

StackOverflow https://stackoverflow.com/questions/3137222

  •  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()操作。

  1. 这是如何完成的?
  2. 现在需要使用吗 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 因为默认路由机制对病例不敏感。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top