Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
von Stephen Walther
In diesem Tutorial veranschaulicht Stephen Walther, wie Sie steuern können, wie Browseranforderungen Routen entsprechen, 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.
Stellen Sie sich beispielsweise vor, Sie haben die Route in Listing 1 in Ihrer Datei Global.asax definiert.
Eintrag 1 : Global.asax.cs
routes.MapRoute(
"Product",
"Product/{productId}",
new {controller="Product", action="Details"}
);
Listing 1 enthält eine Route mit dem Namen Product. Sie können die Produktroute verwenden, um Browseranforderungen dem ProductController in Listing 2 zuzuordnen.
Eintrag 2: Controller\ProductController.cs
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
public class ProductController : Controller
{
public ActionResult Details(int productId)
{
return View();
}
}
}
Beachten Sie, dass die vom Produktcontroller verfügbar gemachte Aktion Details() einen einzelnen Parameter mit dem Namen 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 etwas anderes als einen ganzzahligen Wert enthält, zu einem Fehler. Wenn Sie beispielsweise die URL /Product/apple in Ihren Browser eingeben, erhalten Sie die Fehlerseite in Abbildung 1.
Abbildung 01: Explodieren einer Seite (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Was Sie wirklich tun möchten, ist nur mit URLs übereinstimmen, die eine richtige ganzzahlige productId enthalten. Sie können eine Einschränkung verwenden, wenn Sie eine Route definieren, um die URLs einzuschränken, die der Route entsprechen. Die geänderte Produktroute in Listing 3 enthält eine Reguläre Ausdruckseinschränkung, die nur ganzzahlen entspricht.
Eintrag 3: Global.asax.cs
routes.MapRoute(
"Product",
"Product/{productId}",
new {controller="Product", action="Details"},
new {productId = @"\d+" }
);
Der reguläre Ausdruck \d+ entspricht mindestens einer ganzen Zahl. Diese Einschränkung führt dazu, 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 Die Ressource konnte nicht gefunden werden zurückgegeben.