Mi sono appena imbattuto in questa domanda e, anche se ora è piuttosto vecchio, è ancora molto rilevante. Ironia della sorte, l'unico commento corretto in questa discussione è stato pubblicato da un principiante confesso in MVC quando ha scritto il post. Anche i documenti ASP.NET non sono completamente corretti. Ho un grande progetto e sovraccarico con successo i metodi di azione.
Se si comprende il routing, al di là del semplice modello di route predefinito {controller} / {action} / {id}, potrebbe essere ovvio che le azioni del controller possono essere mappate utilizzando qualsiasi modello univoco. Qualcuno qui ha parlato di polimorfismo e ha detto: "HTTP non capisce il polimorfismo", ma il routing non ha nulla a che fare con HTTP. È, in poche parole, un meccanismo per la corrispondenza del modello di stringa.
Il modo migliore per farlo funzionare è utilizzare gli attributi di routing, ad esempio:
[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
}
}
Queste azioni si prenderanno cura di URL come /cars/usa/new-york
e/cars/usa/texas/dallas
, che mapperanno rispettivamente alla prima e alla seconda azione dell'Indice.
Esaminando questo controller di esempio è evidente che va oltre il modello di route predefinito menzionato sopra. L'impostazione predefinita funziona bene se la struttura dell'URL corrisponde esattamente alle convenzioni di denominazione del codice, ma non è sempre così. Il codice dovrebbe essere descrittivo del dominio, ma spesso gli URL devono andare oltre perché il loro contenuto dovrebbe essere basato su altri criteri, come i requisiti SEO.
Il vantaggio del modello di routing predefinito è che crea automaticamente percorsi univoci. Ciò viene applicato dal compilatore poiché gli URL corrisponderanno a tipi e membri di controller univoci. Rotolare i tuoi percorsi personali richiederà un'attenta riflessione per garantire l'unicità e il loro funzionamento.
Nota importante L'unico inconveniente è che l'uso del routing per generare URL per azioni sovraccariche non funziona quando si basa su un nome di azione, ad esempio quando si utilizza UrlHelper.Action. Ma funziona se si utilizzano route denominate, ad esempio UrlHelper.RouteUrl. E utilizzare percorsi con nome è, secondo fonti rispettate, la strada da percorrere in ogni caso ( http://haacked.com/archive/2010/11/21/named-routes-to-the-rescue.aspx/ ).
In bocca al lupo!