This article has been localized into German by the community.
Attribut-Routing
Im vorherigen Artikel haben wir erläutert, was eine Route ist, wie sie funktioniert und wie Sie Routen in den Startup.cs-Dateien definieren können. So werden Routen in vielen Projekten definiert, aber es gibt eine Alternative: Mit ASP.NET MVC können Sie eine Route direkt auf dem verantwortlichen Controller und/oder speziell für die verantwortliche Aktion/Methode definieren. Dies wird häufig als Attributrouting bezeichnet, da Sie die Route für die Methode mithilfe von Attributen definieren. Erlauben Sie mir, dies mit einem Beispiel zu veranschaulichen:
[Route("/products")]
public class ProductController : Controller
{
public IActionResult Index()
{
return Content("Products Index");
}
}
Beachten Sie die allererste Zeile des Beispiels, in der ich mithilfe der Route() - Attributmethode eine Routing-Vorlage für diesen Controller definiere. Sie werden feststellen, dass mein Controller das Wort "Produkt" in der Singularform verwendet, aber ich möchte die Pluralform für die URLs verwenden. Ich kann genau das erreichen, indem ich dieses Wort als Routing-Vorlage für den Controller definiere. Mit diesem Wort kann ich nun auf URLs wie /products/ oder /products zugreifen. Sie werden nur standardmäßig unsere Indexmethode verwenden.
Das war sehr einfach und funktioniert nur, weil es automatisch auf die Index-Methode zurückgreift, aber das Attribut-Routing ermöglicht auch viel kompliziertere Anwendungsfälle. Zum Beispiel könnte unser Controller auch verwendet werden, um ein einzelnes Produkt anstelle des allgemeinen Index / der allgemeinen Übersicht zu bedienen. Fügen wir dazu eine Methode hinzu und definieren gleichzeitig einen Zugangsweg:
[Route("/products")]
public class ProductController : Controller
{
public IActionResult Index()
{
return Content("Products Index");
}
[Route("{id}")]
public IActionResult Details(int id)
{
return Content("Product #" + id);
}
}
Beachten Sie, wie ich der Methode Details ein Routenattribut hinzugefügt habe. Es wird eine spezielle Syntax zum Definieren des variablen Inhalts verwendet, bei der der Name des Parameters in geschweiften Klammern angegeben wird. Wir werden dies später in diesem Kapitel genauer erläutern. Beachten Sie jedoch, dass Sie hier einen Parameter angeben können, der an die Antwortmethode übergeben wird. In diesem Fall bedeutet dies, dass wir das Produkt jetzt mit der über die URL übergebenen ID laden und dem Benutzer anzeigen können (im Beispiel wird die ID jedoch nur gedruckt, um die Sache zu vereinfachen). Unser Controller unterstützt jetzt URLs wie diese: /products/42 und /products/84/ (der letzte Schrägstrich ist optional).
Bitte beachten Sie, dass ich nur den letzten Teil der URL in der Routenvorlage (die ID) übernehme, da der Controller bereits angibt, dass diese zuerst mit dem Wort Produkte aufgerufen werden soll. Wäre dies nicht der Fall, müssten wir stattdessen die gesamte URL für diese bestimmte Methode wie folgt definieren:
[Route("/products/{id}")]
public IActionResult Details(int id)
{
return Content("Product #" + id);
}
Ob Sie es also teilweise für den Controller und teilweise für die Methode definieren oder bei jeder Methode alles angeben, liegt ganz bei Ihnen und der Situation. Es kann nützlich sein, alles für jede Methode zu definieren, wenn Ihr Controller mehr als eine Eingangs-URL unterstützen soll. In den meisten Situationen können Sie jedoch möglicherweise ein paar Tastenanschläge sparen, indem Sie einen gemeinsamen Eingang für den Controller definieren und dann den Rest für jede Methode.
In einigen Situationen möchten Sie möglicherweise, dass eine Methode mehr als eine Route hat. Dies ist einfach zu bewerkstelligen, da Sie beliebig viele definieren können. Sie können sogar URLs, die teilweise oder vollständig für die jeweilige Methode definiert wurden, mischen und zuordnen.
[Route("/products")]
public class ProductController : Controller
{
public IActionResult Index()
{
return Content("Products Index");
}
[Route("{id}")]
[Route("/product/{id}")]
public IActionResult Details(int id)
{
return Content("Product #" + id);
}
}
Mit dieser Funktion kann auf unsere Produktdetailseite nun über URLs zugegriffen werden, die sowohl die Singular- als auch die Pluralform des Wortes "Produkt" enthalten. Dieses spezielle Ergebnis könnte auf andere Weise mit einer flexibleren Route erzielt werden, dient jedoch als anschauliche Demonstration, wie einfach es ist, mehrere Routen zu definieren.
Zusammenfassung
Das Attributrouting kann eine gute Alternative zur herkömmlichen Definition von Routen in Ihrem Projekt sein. Da sie direkt auf dem Controller definiert sind, ist es möglicherweise einfacher zu verstehen, welche Routen für einen bestimmten Controller und eine bestimmte Methode gültig sind. Auf der anderen Seite gibt es einige Einschränkungen bei der Verwendung des Attribut-Routings, wenn es um Routing-Einschränkungen geht, aber in den meisten Situationen sollte dies kein Problem sein. Wenn Sie dennoch auf diese Einschränkungen stoßen, können Sie das herkömmliche Routing mit dem Attributrouting kombinieren.
Letztendlich kommt es also auf den persönlichen Geschmack und die Anforderungen des Projekts an, an dem Sie arbeiten, ob Sie das Attribut-Routing verwenden oder nicht.