C'è qualcuno che potrebbe far luce sul perché i metodi ambigui non sono consentiti in ASP.Net MVC?
Ho aggiornato la mia domanda solo per chiarirla (usando l'esempio di Carson63000 dalla sua risposta), la domanda stessa rimane la stessa .
Quindi, diciamo che abbiamo la seguente azione
/article/list/sport
che chiama
public ActionResult List(string category) { }
e vuoi essere in grado di avere anche la seguente azione:
/article/list/sport/20110904
che vorremmo chiamare il metodo di accompagnamento
public ActionResult List(string category, DateTime date) { }
Attualmente il framework lancia un AmbiguousMatchException
poiché ha trovato due metodi chiamati List. Questa è l'unica ragione per lanciare l'eccezione, che è stato trovato più di un metodo che corrisponde al nome dell'azione.
Dopo che il framework ha capito quale metodo utilizzare e ha deciso che non è ambiguo, tenterà quindi di mappare i dati forniti dalla richiesta ai parametri del metodo. Perché non farlo al contrario? Per prima cosa ottieni tutti i metodi applicabili e poi prova a trovare la soluzione migliore mappando i parametri.
Se sono permessi metodi ambigui, penso che sia ancora possibile fare quanto segue.
Dato che /article/list/sport
usa la rotta /{controller}/{action}/{category}
e che /article/list/sport/20110903
usa la rotta /{controller}/{action}/{category}/{date}
sarebbe quindi ancora possibile mappare i dati per url /article/list/sport?date=20110903
poiché corrisponderà al percorso per la sola categoria, ma può ancora mappare i dati per il metodo public ActionResult List(string category, DateTime date) { }
.
Al momento non riesco a vedere la ragione per non consentire metodi ambigui dal punto di vista del design. L'unica cosa che posso pensare a me stesso è che rallenterà troppo la struttura, e quindi la soluzione attuale è la più logica. O mi manca un altro punto qui?