Acabei de me deparar com essa pergunta e, apesar de já estar antiga, ainda é muito relevante. Ironicamente, o único comentário correto neste tópico foi postado por um iniciante confesso no MVC quando ele escreveu o post. Mesmo os documentos do ASP.NET não estão totalmente corretos. Tenho um projeto grande e sobrecarrego com êxito os métodos de ação.
Se você entender o roteamento, além do padrão de rota padrão simples de {controller} / {action} / {id}, pode ser óbvio que as ações do controlador podem ser mapeadas usando qualquer padrão exclusivo. Alguém aqui falou sobre polimorfismo e disse: "HTTP não entende polimorfismo", mas o roteamento não tem nada a ver com HTTP. É, simplesmente, um mecanismo para correspondência de padrões de string.
A melhor maneira de fazer isso funcionar é usar os atributos de roteamento, por exemplo:
[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
}
}
Essas ações cuidarão de URLs como /cars/usa/new-york
e /cars/usa/texas/dallas
, que serão mapeados para a primeira e a segunda ações do Índice, respectivamente.
Examinando este exemplo de controlador, é evidente que ele vai além do padrão de rota padrão mencionado acima. O padrão funciona bem se sua estrutura de URL corresponder exatamente às convenções de nomenclatura de código, mas esse nem sempre é o caso. O código deve ser descritivo do domínio, mas os URLs geralmente precisam ir além, porque seu conteúdo deve ser baseado em outros critérios, como requisitos de SEO.
O benefício do padrão de roteamento padrão é que ele cria automaticamente rotas exclusivas. Isso é imposto pelo compilador, já que os URLs corresponderão a tipos e membros exclusivos de controladores. A rolagem de seus próprios padrões de rota exigirá uma reflexão cuidadosa para garantir a exclusividade e o funcionamento.
Nota importante A única desvantagem é que o uso de roteamento para gerar URLs para ações sobrecarregadas não funciona quando baseado em um nome de ação, por exemplo, ao usar UrlHelper.Action. Mas funciona se alguém usa rotas nomeadas, por exemplo, UrlHelper.RouteUrl. E usar rotas nomeadas é, de acordo com fontes bem respeitadas, o caminho a seguir de qualquer maneira ( http://haacked.com/archive/2010/11/21/named-routes-to-the-rescue.aspx/ ).
Boa sorte!