Как направить строчные URL-адреса ('questions / add_to_fabilities / 123') с подчеркиваниями в ASP.NET MVC2? - PullRequest
3 голосов
/ 29 июня 2010

Контроллеры и действия ASP.NET MVC 2 используют UpperCamelCase.

По некоторым причинам многие крупные сайты, включая SO, используют строчные буквы (с подчеркиванием) для контроллеров и действий в 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 в действие AddToFoving () контроллера вопросов.

  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() {
  // ...
}

Однако это не работает для контроллеров.Возможно, если бы мы могли каким-то образом удалить все подчеркивания из запроса до того, как он попадет в механизм маршрутизации, он бы работал.

1 Ответ

2 голосов
/ 30 июня 2010

Вы можете добавить пользовательские маршруты вручную.Это не универсальное решение и должно быть добавлено для каждого контроллера и действия в отдельности.

routes.MapRoute(
    "Web2.0 RoR style lowercase URLs with underscores", 
    "questions-foo/add_to_favorites", 
    new { controller = "Questions", action = "AddToFavorites" }
);

Круто то, что URL, генерирующие методы Html-helper, изменять не нужно.Таблица маршрутизации используется для маршрутизации входящих запросов и для генерации URL.Итак,

Html.ActionLink("Add to favorites", "Questions", "AddToFavorites"); отображается на /questions-foo/add_to_favorites.

Обратите внимание, что исходный /Question/AddToFavorites по-прежнему работает так же, как /qUeStIoN/aDdtOfAvOrItEs, а также /qUeStIoNs-FOO/ADD_TO_FAVORITES, потому что механизм маршрутизации по умолчанию имеет местонечувствительные к регистру.

...