Freigeben über


Erstellen von benutzerdefinierten Routen (VB)

von Microsoft

Erfahren Sie, wie Sie einer ASP.NET MVC-Anwendung benutzerdefinierte Routen hinzufügen. In diesem Tutorial erfahren Sie, wie Sie die Standardroutentabelle in der Datei Global.asax ändern.

In diesem Tutorial erfahren Sie, wie Sie einer ASP.NET MVC-Anwendung eine benutzerdefinierte Route hinzufügen. Sie erfahren, wie Sie die Standardroutentabelle in der Datei Global.asax mit einer benutzerdefinierten Route ändern.

In ASP.NET MVC-Anwendungen funktioniert die Standardroutentabelle einwandfrei. Sie können jedoch feststellen, dass Sie spezielle Routinganforderungen haben. In diesem Fall können Sie eine benutzerdefinierte Route erstellen.

Stellen Sie sich beispielsweise vor, Sie erstellen eine Bloganwendung. Sie können eingehende Anforderungen behandeln, die wie folgt aussehen:

/Archiv/25.12.2009

Wenn ein Benutzer diese Anforderung eingibt, möchten Sie den Blogeintrag zurückgeben, der dem Datum 25.12.2009 entspricht. Um diesen Anforderungstyp verarbeiten zu können, müssen Sie eine benutzerdefinierte Route erstellen.

Die Datei Global.asax in Listing 1 enthält eine neue benutzerdefinierte Route namens Blog, die Anforderungen verarbeitet, die wie /Archiv/entry-Datum aussehen.

Listing 1 – Global.asax (mit benutzerdefinierter Route)

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( _
            "Blog", _
            "Archive/{entryDate}", _
            New With {.controller = "Archive", .action = "Entry"} _
        )
        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

Die Reihenfolge der Routen, die Sie der Routingtabelle hinzufügen, ist wichtig. Unsere neue benutzerdefinierte Blogroute wird vor der vorhandenen Standardroute hinzugefügt. Wenn Sie die Reihenfolge umgekehrt haben, wird anstelle der benutzerdefinierten Route immer die Standardroute aufgerufen.

Die benutzerdefinierte Blogroute entspricht jeder Anforderung, die mit /Archive/beginnt. Es entspricht also allen folgenden URLs:

  • /Archiv/25.12.2009

  • /Archive/10-6-2004

  • /Archive/apple

Die benutzerdefinierte Route ordnet die eingehende Anforderung einem Controller namens Archive zu und ruft die Entry()-Aktion auf. Wenn die Entry()-Methode aufgerufen wird, wird das Eintragsdatum als Parameter mit dem Namen entryDate übergeben.

Sie können die benutzerdefinierte Blog-Route mit dem Controller in Listing 2 verwenden.

Eintrag 2 : ArchiveController.vb

Public Class ArchiveController
    Inherits System.Web.Mvc.Controller
    Function Entry(ByVal entryDate As DateTime)
        Return "You requested the entry from " & entryDate.ToString()
    End Function
End Class

Beachten Sie, dass die Entry()-Methode in Listing 2 einen Parameter vom Typ DateTime akzeptiert. Das MVC-Framework ist intelligent genug, um das Eingabedatum aus der URL automatisch in einen DateTime-Wert zu konvertieren. Wenn der Eingabedatumsparameter aus der URL nicht in eine DateTime konvertiert werden kann, wird ein Fehler ausgelöst (siehe Abbildung 1).

Abbildung 1: Fehler beim Konvertieren des Parameters

Dialogfeld „New Project“ (Neues Projekt)

Abbildung 01: Fehler beim Konvertieren des Parameters (Klicken Sie hier, um das bild in voller Größe anzuzeigen)

Zusammenfassung

Das Ziel dieses Tutorials bestand darin, zu veranschaulichen, wie Sie eine benutzerdefinierte Route erstellen können. Sie haben gelernt, wie Sie der Routingtabelle in der Datei Global.asax, die Blogeinträge darstellt, eine benutzerdefinierte Route hinzufügen. Wir haben erläutert, wie Anforderungen für Blogeinträge einem Controller mit dem Namen ArchiveController und einer Controlleraktion mit dem Namen Entry() zugeordnet werden.