Я только что натолкнулся на этот вопрос, и хотя он довольно старый, он все еще очень актуален. По иронии судьбы, один правильный комментарий в этой теме был опубликован новичком в MVC, который сам признался, когда писал эту статью. Даже документы ASP.NET не совсем корректны. У меня большой проект, и я успешно перегружаю методы действий.
Если кто-то понимает маршрутизацию, помимо простого шаблона маршрута по умолчанию {controller} / {action} / {id}, может быть очевидно, что действия контроллера могут быть отображены с использованием любого уникального шаблона. Кто-то здесь говорил о полиморфизме и сказал: «HTTP не понимает полиморфизм», но маршрутизация не имеет ничего общего с HTTP. Проще говоря, это механизм для сопоставления строковых шаблонов.
Лучший способ выполнить эту работу - использовать атрибуты маршрутизации, например:
[RoutePrefix("cars/{country:length(3)}")]
public class CarHireController
{
[Route("{location}/{page:int=1}", Name = "CarHireLocation")]
public ActionResult Index(string country, string location, int page)
{
return Index(country, location, null, page);
}
[Route("{location}/{subLocation}/{page:int=1}", Name = "CarHireSubLocation")]
public ActionResult Index(string country, string location, string subLocation, int page)
{
//The main work goes here
}
}
Эти действия будут относиться к URL-адресам, таким как /cars/usa/new-york
и /cars/usa/texas/dallas
, которые будут отображаться в первом и втором индексных действиях соответственно.
Изучив этот пример контроллера, очевидно, что он выходит за рамки шаблона маршрута по умолчанию, упомянутого выше. Значение по умолчанию работает хорошо, если ваша структура URL точно соответствует соглашениям об именах кода, но это не всегда так. Код должен описывать домен, но URL-адреса часто должны идти дальше, потому что их содержание должно основываться на других критериях, таких как требования SEO.
Преимущество шаблона маршрутизации по умолчанию заключается в том, что он автоматически создает уникальные маршруты. Это обеспечивается компилятором, поскольку URL-адреса будут соответствовать уникальным типам и членам контроллера. Прокрутка собственных шаблонов маршрутов потребует тщательного обдумывания, чтобы обеспечить уникальность и то, что они работают.
Важное примечание Единственный недостаток заключается в том, что использование маршрутизации для генерации URL-адресов для перегруженных действий не работает, если основано на имени действия, например, при использовании UrlHelper.Action. Но это работает, если использовать именованные маршруты, например, UrlHelper.RouteUrl. И использование названных маршрутов, согласно хорошо уважаемым источникам, является путем, чтобы пойти так или иначе (http://haacked.com/archive/2010/11/21/named-routes-to-the-rescue.aspx/).
Удачи!