Verwendung des Attributroutings in ASP.NET Core

Die Routing-Middleware in ASP.NET Core kann eingehende Anforderungen den jeweiligen Routenhandlern zuordnen. Sie können das Routing in ASP.NET Core auf zwei verschiedene Arten einrichten: Attributbasiertes Routing und konventionelles Routing.

Im Gegensatz zum konventionellen Routing, bei dem die Routing-Informationen an einem einzelnen Speicherort angegeben werden, können Sie beim Attribut-Routing das Routing implementieren, indem Sie Ihre Aktionsmethoden mit Attributen dekorieren. Dieser Artikel enthält eine Diskussion darüber, wie wir mit attributbasiertem Routing in ASP.NET Core MVC arbeiten können.

Um mit den in diesem Artikel bereitgestellten Codebeispielen arbeiten zu können, muss Visual Studio 2019 auf Ihrem System installiert sein. Wenn Sie noch keine Kopie haben, können Sie Visual Studio 2019 hier herunterladen. 

Erstellen Sie ein ASP.NET Core 3.1 MVC-Projekt in Visual Studio 2019

Lassen Sie uns zunächst ein ASP.NET Core-Projekt in Visual Studio 2019 erstellen. Angenommen, Visual Studio 2019 ist auf Ihrem System installiert, führen Sie die folgenden Schritte aus, um ein neues ASP.NET Core-Projekt in Visual Studio zu erstellen.

  1. Starten Sie die Visual Studio-IDE.
  2. Klicken Sie auf "Neues Projekt erstellen".
  3. Wählen Sie im Fenster "Neues Projekt erstellen" aus der Liste der angezeigten Vorlagen "ASP.NET Core-Webanwendung" aus.
  4. Weiter klicken.
  5. Geben Sie im Fenster "Konfigurieren Sie Ihr neues Projekt" den Namen und den Speicherort für das neue Projekt an.
  6. Aktivieren Sie optional das Kontrollkästchen "Lösung und Projekt im selben Verzeichnis platzieren", abhängig von Ihren Einstellungen.
  7. Klicken Sie auf Erstellen.
  8. Wählen Sie im nächsten Fenster "Neue ASP.NET Core-Webanwendung erstellen" .NET Core als Laufzeit und ASP.NET Core 3.1 (oder höher) aus der Dropdown-Liste oben aus.
  9. Wählen Sie als Projektvorlage „Webanwendung (Model-View-Controller)“ aus, um eine neue ASP.NET Core MVC-Anwendung zu erstellen. 
  10. Stellen Sie sicher, dass die Kontrollkästchen "Docker-Unterstützung aktivieren" und "Für HTTPS konfigurieren" deaktiviert sind, da diese Funktionen hier nicht verwendet werden.
  11. Stellen Sie sicher, dass die Authentifizierung auf "Keine Authentifizierung" eingestellt ist, da wir auch keine Authentifizierung verwenden.
  12. Klicken Sie auf Erstellen.

Wenn Sie diese Schritte ausführen, wird in Visual Studio 2019 ein neues ASP.NET Core MVC-Projekt erstellt. In den folgenden Abschnitten wird dieses Projekt verwendet, um zu veranschaulichen, wie wir mit dem Attributrouting in ASP.NET Core 3.1 arbeiten können.

Erstellen Sie eine Controller-Klasse in ASP.NET Core MVC

Erstellen Sie einen neuen Controller mit dem Namen DefaultController und ersetzen Sie den Standardquellcode des DefaultControllers durch den folgenden Code:

    öffentliche Klasse DefaultController: Controller

    {

        [Route("")]

        [Route ("Standard")]

        [Route ("Standard / Index")]

        öffentlicher ActionResult Index ()

        {

            return new EmptyResult ();

        }}

        [Route ("Default / GetRecordsById / {id}")]

        public ActionResult GetRecordsById (int id)

        {

            string str = string.Format

            ("Die als Parameter übergebene ID lautet: {0}", ID);

            return Ok (str);

        }}

    }}

Verwenden Sie das Attributrouting auf Controller-Ebene in ASP.NET Core

Das Attribut-Routing kann sowohl auf Controller- als auch auf Aktionsmethodenebene verwendet werden. Wenn wir das Routenattribut auf Controller-Ebene anwenden, gilt die Route für alle Aktionsmethoden dieses Controllers.

Wenn Sie unsere DefaultController-Klasse untersuchen, werden Sie feststellen, dass die Standardroute bei der Angabe der Routenvorlage für die Aktionsmethoden mehrmals verwendet wird. Das folgende Codeausschnitt zeigt, wie Sie verschiedene Routenattribute auf Controller-Ebene angeben können, um das Attribut-Routing flexibler zu nutzen.

[Route ("Standard")]   

öffentliche Klasse DefaultController: Controller

{

  [Route("")]

  [Route ("Index")]

  öffentlicher ActionResult Index ()

  {

      return new EmptyResult ();

   }}

  [HttpGet]

  Route ("Default / GetRecordsById / {id}")]

  public ActionResult GetRecordsById (int id)

  {

      string str = string.Format ("Die als Parameter übergebene ID lautet: {0}", id);

      return Ok (str);

   }}

}}

Bei Verwendung von Routenattributen sowohl auf Controller- als auch auf Aktionsmethodenebene wird die auf Controller-Ebene angewendete Routenvorlage der auf Aktionsmethodenebene angegebenen Routenvorlage vorangestellt.

Möglicherweise benötigen Sie häufig ein gemeinsames Präfix für Ihren Controller. Wenn Sie dies tun, sollten Sie das Attribut [RoutePrefix] verwenden, wie im unten angegebenen Codeausschnitt gezeigt.

[RoutePrefix ("Dienste")]

öffentliche Klasse HomeController: Controller

{

   // Aktionsmethoden

}}

Verwenden Sie das Attributrouting auf der Ebene der Aktionsmethoden in ASP.NET Core

Weitere Informationen finden Sie in der oben gezeigten DefaultController-Klasse. Wie Sie sehen können, haben wir in der Indexmethode der DefaultController-Klasse drei Routen angegeben. Dies bedeutet, dass jede der folgenden URLs die Aktionsmethode Index () des DefaultControllers aufruft.

// localhost: 11277

// localhost: 11277 / home

// localhost: 11277 / home / index

Wie beim konventionellen Routing können Sie auch beim attributbasierten Routing Parameter angeben. Mit anderen Worten, beim attributbasierten Routing können Sie Routenattribute mit Parametern angeben. Die zuvor gezeigte GetRecordsById-Aktionsmethode der DefaultController-Klasse ist ein Beispiel.

Beachten Sie, dass "{id}" in der angegebenen Route einen Parameter oder einen Platzhalter darstellt. Der id-Parameter in diesem Beispiel kann eine beliebige Zeichenfolge oder eine Ganzzahl sein. Was ist, wenn Sie den Parameter nur auf Ganzzahlen beschränken möchten? Sie können dies mithilfe von Einschränkungen erreichen.

Verwenden Sie Attributroutenbeschränkungen in einer Aktionsmethode

Routenbeschränkungen werden verwendet, um ungültige Anforderungen an Controller-Aktionen zu vereiteln. Beispielsweise möchten Sie möglicherweise sicherstellen, dass der an eine Aktionsmethode übergebene Parameter immer eine Ganzzahl ist. Die Syntax für die Verwendung von Routeneinschränkungen lautet {Parameter: Einschränkung}. Das folgende Codefragment veranschaulicht dies. Beachten Sie, dass der Parameter id hier immer eine Ganzzahl ist.

[Route ("Default / GetRecordsById / {id: int}")]

public ActionResult GetRecordsById (int id)

{

  string str = string.Format ("Die als Parameter übergebene ID lautet: {0}", id);

  return Ok (str);

}}

Verwenden Sie optionale Parameter in Attributroutenspezifikationen

Sie können auch optionale Parameter in Ihrer Routenspezifikation verwenden. Das folgende Codefragment zeigt, wie dies erreicht werden kann. Beachten Sie, dass die Aktionsmethode in diesem Fall auch dann ausgeführt wird, wenn der Parameter id nicht übergeben wird.

[Route ("Sales / GetSalesByRegionId / {id?}")]

Es ist wichtig zu verstehen, dass bei Verwendung des Attribut-Routings weder der Controller-Name noch der Name der Aktionsmethode eine Rolle bei der Auswahl der auszuführenden Aktionsmethode spielen. Lassen Sie uns dies anhand eines Beispiels sehen. Das folgende Codeausschnitt zeigt, wie die URL in der Routenspezifikation für die Aktionsmethode GetRecordsById geändert wurde.

[Route ("Home / GetRecordsById / {id: int}")]

public ActionResult GetRecordsById (int id)

{

   string str = string.Format ("Die als Parameter übergebene ID lautet: {0}", id);

   return Ok (str);

}}

Sie können jetzt die Aktionsmethode GetRecordsById unter der folgenden URL aufrufen:

// localhost: 11277 / home / GetRecordsById / 1

Verwenden Sie in einer Aktionsmethode Routenbeschränkungen für mehrere Attribute

Es ist auch möglich, mehrere Einschränkungen auf einen Parameter anzuwenden. Das folgende Codefragment zeigt, wie dies erreicht werden kann. Beachten Sie, dass der Mindestwert des ID-Parameters 1 sein sollte, da sonst ein 404-Fehler zurückgegeben wird.

[Route ("Default / GetRecordsById / {id: int: min (1)}")]

public ActionResult GetRecordsById (int id)

{

    string str = string.Format ("Die als Parameter übergebene ID lautet: {0}", id);

    return Ok (str);

}}

Verwenden Sie HTTP-Verben in Attributrouten in einer Aktionsmethode

Sie können sogar HTTP-Verben im Attribut-Routing verwenden. Das folgende Codefragment zeigt, wie dies erreicht werden kann.

[HttpGet]

[Route ("Default / GetRecordsById / {id: int: min (1)}")]

public ActionResult GetRecordsById (int id)

{

  string str = string.Format ("Die als Parameter übergebene ID lautet: {0}", id);

  return Ok (str);

}}

Häufig verwendete Attributroutenbeschränkungen 

Hier ist eine Liste der am häufigsten verwendeten Routenbeschränkungen in ASP.NET Core. 

  • bool - wird verwendet, um einem booleschen Wert zu entsprechen
  • datetime - wird verwendet, um einem DateTime-Wert zu entsprechen
  • dezimal - wird verwendet, um einem Dezimalwert zu entsprechen
  • double - wird verwendet, um einen 64-Bit-Gleitkommawert abzugleichen
  • float - wird verwendet, um einem 32-Bit-Gleitkommawert zu entsprechen
  • guid - wird verwendet, um einen GUID-Wert abzugleichen
  • int - wird verwendet, um einen 32-Bit-Ganzzahlwert abzugleichen
  • long - wird verwendet, um einem 64-Bit-Integer-Wert zu entsprechen
  • max - wird verwendet, um eine Ganzzahl mit einem Maximalwert abzugleichen
  • min - wird verwendet, um eine Ganzzahl mit einem Mindestwert abzugleichen
  • minlength - wird verwendet, um eine Zeichenfolge mit einer Mindestlänge abzugleichen
  • Regex - wird verwendet, um einem regulären Ausdruck zu entsprechen

Erstellen Sie benutzerdefinierte Attributroutenbeschränkungen 

Sie können auch Ihre eigenen benutzerdefinierten Routenbeschränkungen erstellen, indem Sie eine Klasse erstellen, die die IRouteConstraint-Schnittstelle erweitert und die Match-Methode implementiert, wie im folgenden Code-Snippet gezeigt.

öffentliche Klasse CustomRouteConstraint: IRouteConstraint

    {

        public bool Match (HttpContext httpContext, IRouter-Route,

        string routeKey,

        RouteValueDictionary-Werte, RouteDirection routeDirection)

        {

            neue NotImplementedException () auslösen;

        }}

    }}

Verwenden Sie die Token-Ersetzung in Attributrouten auf Controller-Ebene

Das Attribut-Routing in ASP.NET Core MVC bietet Unterstützung für eine weitere interessante Funktion namens Token-Ersetzung. Sie können die Token [Aktion], [Bereich] und [Controller] in Ihrem Controller verwenden. Diese Token werden durch die Namen der Aktion, des Bereichs bzw. des Controllers ersetzt. Das folgende Codefragment zeigt, wie dies erreicht werden kann.

[Route ("[Controller] / [Aktion]")]

öffentliche Klasse HomeController: Controller

{

   privat schreibgeschützt ILogger _logger;

   öffentlicher HomeController (ILogger Logger)

   {

       _logger = logger;

   }}

   öffentlicher IActionResult Index ()

   {

       return View ();

   }}

   // Andere Aktionsmethoden

}}

Das Attribut-Routing in ASP.NET Core bietet Ihnen mehr Kontrolle und Flexibilität über die URIs in Ihrer Webanwendung. Obwohl konventionelles Routing an einem einzigen Standort konfiguriert werden kann, der wiederum auf alle Controller in Ihrer Anwendung angewendet werden kann, ist es schwierig, bestimmte URI-Muster (z. B. API-Versionierung) mit konventionellem Routing zu unterstützen.

Mithilfe des Attributroutings können Sie die Controller- und Aktionsnamen von der Routenvorlage entkoppeln. Sie können in Ihren ASP.NET Core-Anwendungen sogar eine Kombination aus konventionellem Routing und attributbasiertem Routing verwenden.

So machen Sie mehr in ASP.NET Core:

  • Übergeben von Parametern an Aktionsmethoden in ASP.NET Core MVC
  • Verwendung von API-Analysatoren in ASP.NET Core
  • So verwenden Sie Routendatentoken in ASP.NET Core
  • Verwendung der API-Versionierung in ASP.NET Core
  • Verwendung von Datenübertragungsobjekten in ASP.NET Core 3.1
  • Behandlung von 404-Fehlern in ASP.NET Core MVC
  • Verwendung der Abhängigkeitsinjektion in Aktionsfiltern in ASP.NET Core 3.1
  • Verwendung des Optionsmusters in ASP.NET Core
  • Verwendung des Endpunktroutings in ASP.NET Core 3.0 MVC
  • Exportieren von Daten nach Excel in ASP.NET Core 3.0
  • Verwendung von LoggerMessage in ASP.NET Core 3.0
  • So senden Sie E-Mails in ASP.NET Core
  • So protokollieren Sie Daten in SQL Server in ASP.NET Core
  • So planen Sie Jobs mit Quartz.NET in ASP.NET Core
  • So geben Sie Daten von der ASP.NET Core Web API zurück
  • So formatieren Sie Antwortdaten in ASP.NET Core
  • So verwenden Sie eine ASP.NET Core-Web-API mit RestSharp
  • So führen Sie asynchrone Vorgänge mit Dapper aus
  • Verwendung von Feature-Flags in ASP.NET Core
  • Verwendung des FromServices-Attributs in ASP.NET Core
  • So arbeiten Sie mit Cookies in ASP.NET Core
  • So arbeiten Sie mit statischen Dateien in ASP.NET Core
  • Verwendung der URL-Rewriting-Middleware in ASP.NET Core
  • Implementieren der Ratenbegrenzung in ASP.NET Core
  • So verwenden Sie Azure Application Insights in ASP.NET Core
  • Verwenden erweiterter NLog-Funktionen in ASP.NET Core
  • Behandlung von Fehlern in der ASP.NET-Web-API
  • Implementieren der globalen Ausnahmebehandlung in ASP.NET Core MVC
  • Umgang mit Nullwerten in ASP.NET Core MVC
  • Erweiterte Versionierung in der ASP.NET Core-Web-API
  • So arbeiten Sie mit Worker Services in ASP.NET Core
  • Verwendung der Datenschutz-API in ASP.NET Core
  • Verwendung der bedingten Middleware in ASP.NET Core
  • So arbeiten Sie mit dem Sitzungsstatus in ASP.NET Core
  • So schreiben Sie effiziente Controller in ASP.NET Core