TOC

This article has been localized into German by the community.

Controller:

Aktionen

Da ein Controller nur eine reguläre .NET-Klasse ist, kann er Felder, Eigenschaften und Methoden haben. Besonders die Methoden einer Controller-Klasse sind interessant, da sie die Verbindung zwischen dem Browser (und damit dem Benutzer) und Ihrer Anwendung herstellen. Aus diesem Grund werden die Methoden einer Controller-Klasse als Aktionen bezeichnet - eine Methode entspricht normalerweise einer Aktion in Ihrer Anwendung, die dann etwas an den Browser/Benutzer zurückgibt.

Da ein Browser eine URL aufruft, benötigen Sie etwas, das URLs in einen entsprechenden Controller und eine entsprechende Aktion (Methode) übersetzt. Beispielsweise fordert der Browser möglicherweise eine URL wie /products/1/ an, und Sie möchten, dass Ihr ProductsController diese Anforderung mit einer Methode/Aktion mit dem Namen Details verarbeitet. Dies geschieht mit dem Routing-Konzept, worüber wir an anderer Stelle in diesem Lernprogramm noch viel mehr sprechen werden. Im Moment müssen Sie jedoch wissen, dass Routing URLs mit Aktionen auf Ihren Controllern verbindet.

Beachten Sie beim Erstellen Ihrer Controller, dass alle öffentlichen Methoden in einer Controller-Klasse als Aktion betrachtet werden. Dies bedeutet, dass, wenn Sie Catch-All-Routing-Regeln für Ihren Controller definiert haben (und dies ist eine gängige Vorgehensweise), theoretisch alle Methoden in Ihrer Controller-Klasse über eine URL erreichbar sind. Wenn Sie also Methoden auf Ihrem Controller haben, die der Endbenutzer nicht aufrufen kann, müssen Sie diese als privat kennzeichnen. Alternativ können Sie die Methode mit dem Attribut [NonAction] markieren, wenn eine Methode wirklich öffentlich, aber nicht über eine URL zugänglich sein soll.

Aktionsverben

Um mehr Kontrolle darüber zu erhalten, wie Ihre Aktionen aufgerufen werden, können Sie sie mit den sogenannten Aktionsverben dekorieren. Hierbei handelt es sich in der Tat um reguläre .NET-Attribute, die dem .NET-Framework mitteilen, wie auf eine Aktion zugegriffen werden kann. Ohne diese Attribute kann auf eine Aktion mit allen möglichen HTTP-Methoden zugegriffen werden (die häufigsten sind GET und POST), aber das können Sie ziemlich einfach ändern:

[HttpGet]
public IActionResult Edit()
{
return Content("Edit");
}

Auf die Aktion Bearbeiten kann jetzt nur mit einer GET-Anforderung zugegriffen werden. Dies hat den zusätzlichen Vorteil, dass Sie mehrere Methoden mit demselben Namen verwenden können, sofern diese nicht dieselbe Anforderungsmethode akzeptieren. So könnten Sie beispielsweise zwei Methoden mit dem Namen "Bearbeiten" verwenden: Die erste steht für GET-Anforderungen zur Verfügung und generiert das FORMULAR zum Bearbeiten eines Elements, während die zweite nur für POST-Anforderungen zur Verfügung steht und zum Aktualisieren des Elements verwendet wird, sobald die FORM wieder zurück auf den Server gepostet wurde. Es könnte so aussehen:

[HttpGet]
public IActionResult Edit()
{
return View();
}

[HttpPost]
public IActionResult Edit(Product product)
{
product.Save();
return Content("Product updated!");
}

Wenn jetzt eine Anforderung an die Edit() -Methode/Aktion gestellt wird, basiert die tatsächliche Methode, die auf die Anforderung reagiert, darauf, ob es sich um eine GET- oder eine POST-Anforderung handelt.

In einigen Situationen möchten Sie möglicherweise mehrere Aktionsverben angeben, z.B.: Um anzugeben, dass auf eine Aktion sowohl von POST- als auch von GET-Anforderungen zugegriffen werden kann, jedoch nicht von anderen Typen. Das ist genauso einfach:

[HttpGet]
[HttpPost]      
public IActionResult Edit()
{
...

Zusammenfassung

Wir haben jetzt mehr über einen der wichtigsten Aspekte eines Controllers erfahren: Die Aktionen, manchmal auch als Aktionsmethoden oder einfach nur Methoden bezeichnet, da dies im Grunde genommen der Fall ist. Im nächsten Artikel diskutieren wir das Ergebnis dieser Aktionen, die als Aktionsergebnisse bezeichnet werden.

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!