Freigeben über


Erstellen einer Routeneinschränkung (VB)

von Stephen Walther

In diesem Tutorial veranschaulicht Stephen Walther, wie Sie steuern können, wie Browseranforderungen Routen übereinstimmen, indem Sie Routeneinschränkungen mit regulären Ausdrücken erstellen.

Sie verwenden Routeneinschränkungen, um die Browseranforderungen einzuschränken, die einer bestimmten Route entsprechen. Sie können einen regulären Ausdruck verwenden, um eine Routeneinschränkung anzugeben.

Angenommen, Sie haben die Route in Listing 1 in Ihrer Global.asax-Datei definiert.

Auflistung 1: Global.asax.vb

routes.MapRoute( _
    "Product", _
    "Product/{productId}", _
    New With {.controller = "Product", .action = "Details"} _
)

Eintrag 1 enthält eine Route mit dem Namen Product. Sie können die Produktroute verwenden, um Browseranforderungen dem ProductController zuzuordnen, der in Listing 2 enthalten ist.

Auflistung 2: Controllers\ProductController.vb

Public Class ProductController
    Inherits System.Web.Mvc.Controller
    Function Details(ByVal productId As Integer) As ActionResult
        Return View()
    End Function
End Class

Beachten Sie, dass die vom Produktcontroller verfügbar gemachte Aktion Details() einen einzelnen Parameter namens productId akzeptiert. Dieser Parameter ist ein ganzzahliger Parameter.

Die in Listing 1 definierte Route entspricht einer der folgenden URLs:

  • /Product/23
  • /Product/7

Leider entspricht die Route auch den folgenden URLs:

  • /Product/blah
  • /Product/apple

Da die Detail()-Aktion einen ganzzahligen Parameter erwartet, führt eine Anforderung, die einen anderen Wert als einen ganzzahligen Wert enthält, zu einem Fehler. Wenn Sie beispielsweise die URL /Product/apple in Ihren Browser eingeben, wird die Fehlerseite in Abbildung 1 angezeigt.

Dialogfeld „New Project“ (Neues Projekt)

Abbildung 01: Explodieren einer Seite (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Was Sie wirklich tun möchten, ist, nur URLs abzugleichen, die eine richtige ganzzahlige productId enthalten. Sie können beim Definieren einer Route eine Einschränkung verwenden, um die URLs einzuschränken, die der Route entsprechen. Die geänderte Produktroute in Listing 3 enthält eine Einschränkung für reguläre Ausdrücke, die nur ganzen Zahlen entspricht.

Auflistung 3: Global.asax.vb

routes.MapRoute( _
   "Product", _
   "Product/{productId}", _
   New With {.controller = "Product", .action = "Details"}, _
   New With {.productId = "\d+"} _
)

Der reguläre Ausdruck \d+ entspricht mindestens einer ganzen Zahl. Diese Einschränkung bewirkt, dass die Product-Route mit den folgenden URLs übereinstimmt:

  • /Product/3
  • /Product/8999

Aber nicht die folgenden URLs:

  • /Product/apple
  • /Produkt

Diese Browseranforderungen werden von einer anderen Route verarbeitet. Wenn keine übereinstimmenden Routen vorhanden sind, wird der Fehler The resource could not be found (Die Ressource wurde nicht gefunden ) zurückgegeben.