So geben Sie Daten von der ASP.NET Core Web API zurück

Wir haben drei Möglichkeiten, Daten und HTTP-Statuscodes von einer Aktionsmethode in ASP.NET Core zurückzugeben. Sie können einen bestimmten Typ zurückgeben, eine Instanz vom Typ IActionResult zurückgeben oder eine Instanz vom Typ ActionResult zurückgeben. 

Obwohl die Rückgabe eines bestimmten Typs der einfachste Weg ist, können Sie mit IActionResult sowohl Daten als auch HTTP-Codes zurückgeben, und mit ActionResult können Sie einen Typ zurückgeben, der IActionResult erweitert. Ein ActionResult kann verwendet werden, um einen HTTP-Statuscode, Daten oder beides von einer Aktionsmethode zu senden.

Dieser Artikel enthält eine Diskussion darüber, wie wir Daten in der ASP.NET Core-Web-API mit jedem dieser Typen zurückgeben können, mit relevanten Codebeispielen in C #. 

Um mit den in diesem Artikel dargestellten Codebeispielen arbeiten zu können, sollte 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 API-Projekt

Zunächst erstellen wir ein ASP.NET Core-Projekt in Visual Studio. 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. Klicken Sie auf Erstellen.
  7. Wählen Sie im nächsten Fenster "Neue ASP.Net Core-Webanwendung erstellen" .NET Core als Laufzeit und ASP.NET Core 2.2 (oder höher) aus der Dropdown-Liste oben aus. Ich werde hier ASP.NET Core 3.0 verwenden.
  8. Wählen Sie "API" als Projektvorlage aus, um eine neue ASP.NET Core API-Anwendung zu erstellen.
  9. 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.
  10. Stellen Sie sicher, dass die Authentifizierung auf "Keine Authentifizierung" eingestellt ist, da wir auch keine Authentifizierung verwenden.
  11. Klicken Sie auf Erstellen.

Dadurch wird ein neues ASP.NET Core API-Projekt in Visual Studio erstellt. Wählen Sie nun im Projektmappen-Explorer den Lösungsordner "Controller" aus und klicken Sie auf "Hinzufügen -> Controller ...", um einen neuen Controller mit dem Namen "DefaultController" zu erstellen. In diesem Projekt werden wir in den folgenden Abschnitten dieses Artikels untersuchen, wie Daten von Aktionsmethoden zurückgegeben werden.

Wenn Sie die unten verwendeten Aktionsmethoden auf einfache Weise testen möchten, empfehlen wir Ihnen, Postman zu nutzen. Sie können eine Kopie von Postman hier herunterladen. 

Erstellen Sie Controller- und Modellklassen in ASP.NET Core

Erstellen Sie einen neuen Lösungsordner und nennen Sie ihn Modelle. Hier platzieren Sie Ihre Modellklassen. Die folgende Codeliste zeigt, wie Sie eine einfache Modellklasse mit dem Namen Author erstellen können.

öffentliche Klasse Autor

    {

        public int Id {get; einstellen; }}

        öffentliche Zeichenfolge Vorname {get; einstellen; }}

        öffentlicher String Nachname {get; einstellen; }}

    }}

So weit, ist es gut. Ersetzen Sie nun den generierten Code der DefaultController-Klasse durch die unten angegebene Codeliste.

using Microsoft.AspNetCore.Mvc;

using System.Collections.Generic;

Namespace CoreWebAPI.Controllers

{

    [Route ("api / [controller]")]

    [ApiController]

    öffentliche Klasse DefaultController: ControllerBase

    {

        private schreibgeschützte Liste Autoren = neue Liste ();

        public DefaultController ()

        {

            Autoren.Add (neuer Autor ()

            {

                Id = 1,

                Vorname = "Joydip",

                Nachname = "Kanjilal"

            });

            Autoren.Add (neuer Autor ()

            {

                Id = 2,

                Vorname = "Steve",

                Nachname = "Smith"

            });

        }}

        [HttpGet]

        public IEnumerable Get ()

        {

            Autoren zurückgeben;

        }}

        [HttpGet ("{id}", Name = "Get")]

        öffentlicher Autor Get (int id)

        {

            Autoren zurückgeben.Find (x => x.Id == id);

        }}

    }}

}}

Gibt einen bestimmten Typ von einer Aktionsmethode in ASP.NET Core zurück

Die einfachste Möglichkeit, Daten von einer Aktionsmethode zurückzugeben, besteht darin, einen bestimmten Typ zurückzugeben. In der oben gezeigten Codeliste gibt die Get-Aktionsmethode eine Liste der Autoreninstanzen zurück. Diese Instanzen werden im Konstruktor der DefaultController-Klasse erstellt und initialisiert. Unten finden Sie erneut die Aktionsmethode als Referenz. Beachten Sie, dass IEnumerable zurückgegeben wird. 

[HttpGet]

public IEnumerable Get ()

{

   Autoren zurückgeben;

}}

Ab ASP.NET Core 3.0 haben Sie auch die Möglichkeit, IAsyncEnumerable von einer Aktionsmethode zurückzugeben. Während IEnumerable eine synchrone Erfassungsiteration durchführt, führt IAsyncEnumerable eine asynchrone Iteration durch. Somit ist IAsyncEnumerable effizienter, da keine blockierenden Aufrufe vorhanden sind. (Ich werde IAsyncEnumerable in einem zukünftigen Beitrag hier weiter diskutieren.)

So können Sie die vorhergehende Aktionsmethode mit IAsyncEnumerable neu schreiben.

[HttpGet]

public async IAsyncEnumerable Get ()

{

   var Autoren = warten GetAuthors ();

   warte auf jeden (var Autor in Autoren)

   {

        Yield Return Autor;

   }}

}}

Gibt eine Instanz vom Typ IActionResult von einer Aktionsmethode in ASP.NET Core zurück

Sie können die IActionResult-Schnittstelle nutzen, wenn Sie sowohl Daten als auch HTTP-Codes von Ihrer Aktionsmethode zurückgeben möchten. Das folgende Codefragment zeigt, wie dies erreicht werden kann.

[HttpGet]

public IActionResult Get ()

{

  if (Autoren == null)

      return NotFound ("Keine Datensätze");

  return Ok (Autoren);

}}

Die IActionResult-Schnittstelle wird von den Klassen OkResult, NotFoundResult, CreatedResult, NoContentResult, BadRequestResult, UnauthorizedResult und UnsupportedMediaTypeResult implementiert.

Im vorhergehenden Codefragment geben die Methoden NotFound () und Ok () Instanzen vom Typ IActionResult zurück.

Gibt eine Instanz vom Typ ActionResult von einer Aktionsmethode in ASP.NET Core zurück

ActionResult wurde in ASP.NET Core 2.1 eingeführt. Ein ActionResult ist ein Typ, der die IActionResult-Schnittstelle implementiert. Sie können den ActionResult-Rückgabetyp verwenden, um einen Typ zurückzugeben, der ActionResult oder einen anderen bestimmten Typ erweitert (z. B. Author in unserem Beispiel).

Das folgende Codeausschnitt zeigt, wie wir ActionResult von einer Aktionsmethode zurückgeben können.

[HttpGet]

öffentliches Aktionsergebnis Bekommen()

{

  if (Autoren == null)

       return NotFound ("Keine Datensätze");

   Autoren zurückgeben;

}}

Wie Sie im vorhergehenden Code-Snippet sehen können, müssen Sie das zurückzugebende Objekt nicht mehr in die Ok () -Methode einschließen - Sie können es einfach so zurückgeben, wie es ist.

Lassen Sie uns dies jetzt asynchron machen. Betrachten Sie die folgende asynchrone Methode, die die Liste der Autoren zurückgibt.

private asynchrone Aufgabe
   
     GetAuthors ()
    

{

    warte auf Task.Delay (100) .ConfigureAwait (false);

    Autoren zurückgeben;

}}

Eine asynchrone Methode sollte mindestens eine wait-Anweisung haben. Wenn keine wait-Anweisungen vorhanden sind, generiert der Compiler eine Warnung, die besagt, dass die Methode synchron ausgeführt wird. Um diese Compiler-Warnung zu vermeiden, habe ich auf einen Aufruf der Task.Delay-Methode im vorhergehenden Code-Snippet gewartet.

Die aktualisierte Aktionsmethode ist unten aufgeführt. Beachten Sie, wie das Schlüsselwort await verwendet wurde, um die soeben erstellte asynchrone Methode aufzurufen.

[HttpGet]

öffentliche asynchrone Aufgabe > Get ()

{

   var data = warte auf GetAuthors ();

   if (data == null)

        return NotFound ("No record");

   Daten zurückgeben;

}}

Sie können auch eine Instanz eines benutzerdefinierten ActionResult von Ihrer Aktionsmethode zurückgeben. Sie müssen lediglich eine Klasse erstellen, die die IActionResult-Schnittstelle und die ExecuteResultAsync-Methode implementiert. Wir werden IActionResult und ActionResult sowie benutzerdefinierte ActionResult-Klassen in einem zukünftigen Beitrag hier diskutieren.