Я щойно стикався з цим питанням, і, хоча воно вже досить давнє, воно все ще дуже актуальне. За іронією долі, єдиний правильний коментар у цій темі опублікував самозваний новачок у MVC, коли написав повідомлення. Навіть документи ASP.NET не зовсім коректні. У мене великий проект, і я успішно перевантажую методи дій.
Якщо хтось розуміє маршрутизацію, що перевищує просту схему маршруту за замовчуванням {kontroler} / {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
, які відображатимуть відповідно до першої та другої дій Index.
Розглядаючи цей контролер прикладу, очевидно, що він виходить за рамки згаданого вище схеми маршруту за замовчуванням. За замовчуванням добре працює, якщо ваша URL-адреса точно відповідає умовам іменування коду, але це не завжди так. Код повинен бути описовим домену, але для URL-адрес часто потрібно йти далі, оскільки їхній вміст має базуватися на інших критеріях, таких як вимоги до SEO.
Перевага схеми маршрутизації за замовчуванням полягає в тому, що вона автоматично створює унікальні маршрути. Це застосовує компілятор, оскільки URL-адреси будуть відповідати унікальним типам контролерів та членам. Прокрутка власних шаблонів маршрутів потребує ретельної продуманості, щоб забезпечити унікальність і щоб вони працювали.
Важлива примітка . Одним недоліком є те, що використання маршрутизації для створення URL-адрес для перевантажених дій не працює, якщо ґрунтуватися на імені дії, наприклад, при використанні UrlHelper.Action. Але це працює, якщо використовуються названі маршрути, наприклад, UrlHelper.RouteUrl. І з використанням названих маршрутів, згідно з шанованими джерелами, це шлях у будь-який спосіб ( http://haacked.com/archive/2010/11/21/named-routes-to-the-rescue.aspx/ ).
Удачі!