Verständnis der ASP.Net MVC Route-Zuordnung

Die Welt der MVC (Model View Controller)-Architektur in ASP.Net kann überwältigend sein, insbesondere wenn Sie gerade erst anfangen. Eine häufige Herausforderung, mit der Entwickler konfrontiert sind, ist das Routing – insbesondere die Zuordnung benutzerdefinierter Routen zu Controllern. In diesem Beitrag werden wir ein häufig auftretendes Problem ansprechen: die Zuordnung von *.aspx-Dateien zu einem PageController.

Das Problem: Zuordnung von *.aspx zu PageController

Stellen Sie sich vor, Sie sind neu in MVC und möchten Seiten mit ASPX-Erweiterungen bereitstellen. Sie könnten versuchen, eine Route wie die folgende zu erstellen:

routes.MapRoute(
   "Page",
   "{name}.aspx",
   new { controller = "Page", action = "Index", id = "" }
);

Wenn Sie jedoch diese Route testen, indem Sie eine URL wie /Page.aspx eingeben, könnten Sie auf eine Fehlermeldung stoßen, die besagt, dass der Controller für den Pfad nicht gefunden werden konnte:

Der Controller für den Pfad ‘/Page.aspx’ konnte nicht gefunden werden oder implementiert nicht das IController-Interface. Parametername: controllerType

Dieser Fehler kann frustrierend sein und Sie fragen lassen, ob Sie etwas übersehen haben.

Die Lösung: Die Reihenfolge ist wichtig bei der Route-Zuordnung

Es könnte Sie erleichtern zu erfahren, dass die Lösung Ihres Problems einfach die Reihenfolge der Routen ist. ASP.Net MVC verarbeitet Routen in der Reihenfolge, in der sie registriert sind. Das bedeutet, dass, wenn die Standardroute vor Ihren benutzerdefinierten Routen deklariert ist, sie Vorrang hat.

Schritte zur Behebung des Problems

  1. Bewegen Sie Ihre benutzerdefinierte Route: Stellen Sie sicher, dass Ihre benutzerdefinierte Routenbeschreibung für *.aspx vor der Standardroute definiert ist. Die angepasste Registrierung sollte so aussehen:

    routes.MapRoute(
        "Page",
        "{name}.aspx",
        new { controller = "Page", action = "Index", id = "" }
    );
    
    routes.MapRoute(
        "Default",
        "{controller}/{action}/{id}",
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
    

Wie Routing funktioniert: Konvention vor Konfiguration

Zur weiteren Klärung der Routing-Logik können wir feststellen, dass MVC ein Prinzip namens Konvention vor Konfiguration verwendet. Das bedeutet, dass das Framework versucht zu erraten, wohin eine Anfrage basierend auf Konventionen und nicht auf expliziter Konfiguration gehen sollte.

Zusätzliche Ressourcen

Für diejenigen, die ihr Verständnis des ASP.Net MVC-Routings vertiefen möchten, hat Scott Guthrie, einer der Hauptautoren von ASP.Net, wertvolle Einblicke geteilt:

Beide Ressourcen bieten eine Fülle von Informationen, die Ihnen helfen können, die Nuancen von MVC und Routing zu navigieren.

Fazit

Zusammenfassend lässt sich sagen, dass die erfolgreiche Zuordnung von *.aspx-Seiten zu PageController in ASP.Net MVC mehr erfordert als nur den richtigen Code zu schreiben; es erfordert ein Verständnis der Reihenfolge der Routenregistrierungen und der zugrunde liegenden Prinzipien des Frameworks. Indem Sie sicherstellen, dass Ihre benutzerdefinierten Routen ordnungsgemäß priorisiert sind, können Sie die frustrierenden Fehler, die mit dem Routing-Prozess verbunden sind, beseitigen.

Also, wenn Sie das nächste Mal von MVC-Routing verwirrt sind, denken Sie daran, dass die Reihenfolge wichtig ist, und suchen Sie nach angesehenen Ressourcen, die Sie auf Ihrer Reise leiten.