Erstellen von benutzerdefinierten Routen (C#)
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.
Für viele einfache 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)
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcApplication1
{
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Blog", // Route name
"Archive/{entryDate}", // URL with parameters
new { controller = "Archive", action = "Entry" } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
}
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.cs
using System;
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
public class ArchiveController : Controller
{
public string Entry(DateTime entryDate)
{
return "You requested the entry from " + entryDate.ToString();
}
}
}
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
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.