Ich bin gerade auf diese Frage gestoßen und obwohl sie jetzt ziemlich alt ist, ist sie immer noch sehr relevant. Ironischerweise wurde der einzig richtige Kommentar in diesem Thread von einem bekennenden Anfänger in MVC gepostet, als er den Beitrag schrieb. Selbst die ASP.NET-Dokumente sind nicht ganz korrekt. Ich habe ein großes Projekt und überlade erfolgreich Aktionsmethoden.
Wenn man das Routing versteht, kann es über das einfache Standardroutenmuster {controller} / {action} / {id} hinaus offensichtlich sein, dass Controller-Aktionen mit einem beliebigen eindeutigen Muster zugeordnet werden können. Jemand hier sprach über Polymorphismus und sagte: "HTTP versteht Polymorphismus nicht", aber Routing hat nichts mit HTTP zu tun. Es ist einfach ausgedrückt ein Mechanismus für den String-Mustervergleich.
Der beste Weg, um diese Arbeit zu machen, ist die Verwendung der Routing-Attribute, zum Beispiel:
[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
}
}
Diese Aktionen kümmern sich um URLs wie /cars/usa/new-york
und /cars/usa/texas/dallas
, die der ersten bzw. zweiten Indexaktion zugeordnet werden.
Bei Betrachtung dieses Beispielcontrollers wird deutlich, dass es über das oben erwähnte Standardroutenmuster hinausgeht. Die Standardeinstellung funktioniert gut, wenn Ihre URL-Struktur genau Ihren Code-Namenskonventionen entspricht. Dies ist jedoch nicht immer der Fall. Code sollte die Domain beschreiben, aber URLs müssen oft noch weiter gehen, da ihr Inhalt auf anderen Kriterien wie SEO-Anforderungen basieren sollte.
Der Vorteil des Standard-Routing-Musters besteht darin, dass automatisch eindeutige Routen erstellt werden. Dies wird vom Compiler erzwungen, da URLs eindeutigen Controller-Typen und -Mitgliedern entsprechen. Das Rollen Ihrer eigenen Routenmuster erfordert sorgfältige Überlegungen, um die Einzigartigkeit sicherzustellen und sicherzustellen, dass sie funktionieren.
Wichtiger Hinweis Der einzige Nachteil ist, dass die Verwendung des Routings zum Generieren von URLs für überladene Aktionen nicht funktioniert, wenn ein Aktionsname verwendet wird, z. B. wenn UrlHelper.Action verwendet wird. Es funktioniert jedoch, wenn benannte Routen verwendet werden, z. B. UrlHelper.RouteUrl. Die Verwendung benannter Routen ist nach Ansicht angesehener Quellen ohnehin der richtige Weg ( http://haacked.com/archive/2010/11/21/named-routes-to-the-rescue.aspx/ ).
Viel Glück!