Freigeben über


ASP.NET MVC-Routing – Übersicht (VB)

von Stephen Walther

In diesem Tutorial zeigt Stephen Walther, wie das ASP.NET MVC-Framework Browseranforderungen Controlleraktionen zuordnet.

In diesem Tutorial erhalten Sie eine Einführung in ein wichtiges Feature jeder ASP.NET MVC-Anwendung namens ASP.NET Routing. Das modul ASP.NET Routing ist für die Zuordnung eingehender Browseranforderungen zu bestimmten MVC-Controlleraktionen zuständig. Am Ende dieses Tutorials erfahren Sie, wie die Standardroutentabelle Anforderungen Controlleraktionen zuordnet.

Verwenden der Standardroutentabelle

Wenn Sie eine neue ASP.NET MVC-Anwendung erstellen, ist die Anwendung bereits für die Verwendung ASP.NET Routing konfiguriert. ASP.NET Routing wird an zwei Stellen eingerichtet.

Zunächst ist ASP.NET Routing in der Webkonfigurationsdatei (Web.config-Datei) Ihrer Anwendung aktiviert. Es gibt vier Abschnitte in der Konfigurationsdatei, die für das Routing relevant sind: der Abschnitt system.web.httpModules, der Abschnitt system.web.httpHandlers, der Abschnitt system.webserver.modules und der Abschnitt system.webserver.handlers. Achten Sie darauf, diese Abschnitte nicht zu löschen, da ohne diese Abschnitte das Routing nicht mehr funktioniert.

Zweitens, und noch wichtiger, wird eine Routingtabelle in der Datei Global.asax der Anwendung erstellt. Die Datei Global.asax ist eine spezielle Datei, die Ereignishandler für ASP.NET Anwendungslebenszyklusereignisse enthält. Die Routingtabelle wird während des Anwendungsstartereignisses erstellt.

Die Datei in Listing 1 enthält die Standarddatei Global.asax für eine ASP.NET MVC-Anwendung.

Auflistung 1: Global.asax.vb

' Note: For instructions on enabling IIS6 or IIS7 classic mode, 
' visit https://go.microsoft.com/?LinkId=9394802

Public Class MvcApplication
    Inherits System.Web.HttpApplication

    Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

        ' MapRoute takes the following parameters, in order:
        ' (1) Route name
        ' (2) URL with parameters
        ' (3) Parameter defaults
        routes.MapRoute( _
            "Default", _
            "{controller}/{action}/{id}", _
            New With {.controller = "Home", .action = "Index", .id = ""} _
        )

    End Sub

    Sub Application_Start()
        RegisterRoutes(RouteTable.Routes)
    End Sub
End Class

Wenn eine MVC-Anwendung zum ersten Mal gestartet wird, wird die Application_Start()-Methode aufgerufen. Diese Methode wiederum ruft die RegisterRoutes()-Methode auf. Die RegisterRoutes()-Methode erstellt die Routingtabelle.

Die Standardroutentabelle enthält eine einzelne Route (mit dem Namen Default). Die Standardroute ordnet das erste Segment einer URL einem Controllernamen, das zweite Segment einer URL einer Controlleraktion und das dritte Segment einem Parameter namens id zu.

Angenommen, Sie geben die folgende URL in die Adressleiste Ihres Webbrowsers ein:

/Home/Index/3

Die Standardroute ordnet diese URL den folgenden Parametern zu:

  • Controller = Start

  • action = Index

  • id = 3

Wenn Sie die URL /Home/Index/3 anfordern, wird der folgende Code ausgeführt:

HomeController.Index(3)

Die Standardroute enthält Standardwerte für alle drei Parameter. Wenn Sie keinen Controller angeben, wird für den Controllerparameter standardmäßig der Wert Home verwendet. Wenn Sie keine Aktion angeben, wird der Aktionsparameter standardmäßig auf den Wert Index festgelegt. Wenn Sie schließlich keine ID angeben, wird der id-Parameter standardmäßig auf eine leere Zeichenfolge festgelegt.

Sehen wir uns einige Beispiele dafür an, wie die Standardroute URLs controller-Aktionen zuordnet. Stellen Sie sich vor, Sie geben die folgende URL in die Adressleiste Ihres Browsers ein:

/Startseite

Aufgrund der Standardwerte für den Routenparameter Default führt die Eingabe dieser URL dazu, dass die Index()-Methode der HomeController-Klasse in Listing 2 aufgerufen wird.

Eintrag 2: HomeController.vb

<HandleError()> _
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index(ByVal id As String)
        Return View()
    End Function

End Class

In Listing 2 enthält die HomeController-Klasse eine Methode namens Index(), die einen einzelnen Parameter namens Id akzeptiert. Die URL /Home bewirkt, dass die Index()-Methode mit dem Wert Nothing als Wert des Id-Parameters aufgerufen wird.

Da das MVC-Framework Controlleraktionen aufruft, stimmt die URL /Home auch mit der Index()-Methode der HomeController-Klasse in Listing 3 überein.

Auflistung 3 : HomeController.vb (Indexaktion ohne Parameter)

<HandleError()> _
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index()
        Return View()
    End Function

End Class

Die Index()-Methode in Listing 3 akzeptiert keine Parameter. Die URL /Home bewirkt, dass diese Index()-Methode aufgerufen wird. Die URL /Home/Index/3 ruft auch diese Methode auf (die ID wird ignoriert).

Die URL /Home stimmt auch mit der Index()-Methode der HomeController-Klasse in Listing 4 überein.

Auflistung 4: HomeController.vb (Indexaktion mit nullable-Parameter)

<HandleError()> _
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index(ByVal id? As Integer)
        Return View()
    End Function

End Class

In Listing 4 verfügt die Index()-Methode über einen Integer-Parameter. Da der Parameter ein Nullable-Parameter ist (kann den Wert Nothing aufweisen), kann index() aufgerufen werden, ohne einen Fehler zu auslösen.

Schließlich verursacht der Aufruf der Index()-Methode in Listing 5 mit der URL /Home eine Ausnahme, da der Id-Parameter kein Nullable-Parameter ist. Wenn Sie versuchen, die Index()-Methode aufzurufen, wird der in Abbildung 1 angezeigte Fehler angezeigt.

Auflistung 5 : HomeController.vb (Indexaktion mit Id-Parameter)

<HandleError()> _
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index(ByVal id As Integer)
        Return View()
    End Function

End Class

Aufrufen einer Controlleraktion, die einen Parameterwert erwartet

Abbildung 01: Aufrufen einer Controlleraktion, die einen Parameterwert erwartet (Klicken, um das Bild in voller Größe anzuzeigen)

Die URL /Home/Index/3 hingegen funktioniert gut mit der Indexcontrolleraktion in Listing 5. Die Anforderung /Home/Index/3 bewirkt, dass die Index()-Methode mit einem Id-Parameter aufgerufen wird, der den Wert 3 aufweist.

Zusammenfassung

Das Ziel dieses Tutorials war es, Ihnen eine kurze Einführung in ASP.NET Routing zu bieten. Wir haben die Standardroutentabelle untersucht, die Sie mit einer neuen ASP.NET MVC-Anwendung erhalten. Sie haben erfahren, wie die Standardroute URLs controller-Aktionen zuordnet.