Ich bin gerade auf diese Frage gestoßen, und auch wenn sie schon ziemlich alt ist, ist sie immer noch sehr aktuell. Ironischerweise wurde der einzige richtige Kommentar in diesem Thread von einem bekennenden MVC-Anfänger gepostet, als er den Beitrag schrieb. Selbst die ASP.NET-Dokumente sind nicht ganz korrekt. Ich habe ein großes Projekt und überlaste erfolgreich Aktionsmethoden.
Wenn man das Routing versteht, das über das einfache Standard-Routenmuster {controller}/{action}/{id} hinausgeht, dürfte es offensichtlich sein, dass Controller-Aktionen mit einem beliebigen eindeutigen Muster abgebildet werden können. Jemand hat hier über Polymorphismus gesprochen und gesagt: "HTTP versteht keinen Polymorphismus", aber Routing hat nichts mit HTTP zu tun. Es ist, einfach ausgedrückt, ein Mechanismus zum Abgleich von Stringmustern.
Am besten funktioniert dies, wenn Sie beispielsweise die Routing-Attribute verwenden:
[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
y /cars/usa/texas/dallas
die der ersten bzw. zweiten Indexaktion zugeordnet werden.
Bei der Prüfung dieses Beispiels wird deutlich, dass es über das oben erwähnte Standard-Routenmuster hinausgeht. Der Standard funktioniert gut, wenn Ihre URL-Struktur genau mit Ihren Code-Namenskonventionen übereinstimmt, aber das ist nicht immer der Fall. Der Code sollte die Domäne beschreiben, aber die URLs müssen oft weiter gehen, weil ihr Inhalt auf anderen Kriterien basieren sollte, z. B. auf SEO-Anforderungen.
Der Vorteil des Standard-Routing-Musters ist, dass es automatisch eindeutige Routen erstellt. Dies wird durch den Compiler erzwungen, da die URLs eindeutigen Controllertypen und -mitgliedern entsprechen. Die Erstellung eigener Routing-Muster erfordert sorgfältige Überlegungen, um die Einzigartigkeit zu gewährleisten und sicherzustellen, dass sie funktionieren.
Wichtiger Hinweis Der einzige Nachteil ist, dass die Verwendung von Routing zur Generierung von URLs für überladene Aktionen nicht funktioniert, wenn diese auf einem Aktionsnamen basieren, z. B. bei Verwendung von UrlHelper.Action. Aber es funktioniert, wenn man benannte Routen verwendet, z.B. UrlHelper.RouteUrl. Und die Verwendung von benannten Routen ist laut angesehenen Quellen ohnehin der richtige Weg ( http://haacked.com/archive/2010/11/21/named-routes-to-the-rescue.aspx/ ).
Viel Glück!