Programování

Jak vrátit data z webového rozhraní API ASP.NET Core

Máme tři způsoby, jak vrátit data a stavové kódy HTTP z metody akce v ASP.NET Core. Můžete vrátit konkrétní typ, vrátit instanci typu IActionResult nebo vrátit instanci typu ActionResult.

I když je vrácení konkrétního typu nejjednodušší způsob, IActionResult umožňuje vrátit data i kódy HTTP a ActionResult vám umožňuje vrátit typ, který rozšiřuje IActionResult. ActionResult lze použít k odeslání stavového kódu HTTP, dat nebo obojího z metody akce.

Tento článek představuje diskusi o tom, jak můžeme vrátit data v ASP.NET Core Web API pomocí každého z těchto typů, s příslušnými příklady kódu v C #.

Chcete-li pracovat s příklady kódu ilustrovanými v tomto článku, měli byste mít ve svém systému nainstalovanou Visual Studio 2019. Pokud ještě nemáte kopii, můžete si stáhnout Visual Studio 2019 zde.

Vytvořte projekt rozhraní API ASP.Net Core

Nejprve si vytvořme projekt ASP.NET Core v sadě Visual Studio. Za předpokladu, že je ve vašem systému nainstalovaná sada Visual Studio 2019, postupujte podle níže uvedených kroků a vytvořte nový projekt ASP.NET Core v sadě Visual Studio.

  1. Spusťte Visual Studio IDE.
  2. Klikněte na „Vytvořit nový projekt“.
  3. V okně „Vytvořit nový projekt“ vyberte ze zobrazeného seznamu šablon „Webová aplikace ASP.Net Core“.
  4. Klikněte na Další.
  5. V okně „Konfigurace nového projektu“ zadejte název a umístění nového projektu.
  6. Klikněte na Vytvořit.
  7. V dalším okně „Vytvořit novou webovou aplikaci ASP.Net Core“ vyberte z rozevíracího seznamu v horní části .NET Core jako běhový modul a ASP.NET Core 2.2 (nebo novější). Budu zde používat ASP.NET Core 3.0.
  8. Vyberte „API“ jako šablonu projektu a vytvořte novou aplikaci API ASP.NET Core.
  9. Ujistěte se, že políčka „Povolit podporu Dockeru“ a „Konfigurovat pro HTTPS“ nejsou zaškrtnuta, protože zde tyto funkce nebudeme používat.
  10. Ujistěte se, že je ověřování nastaveno na „Žádné ověřování“, protože také nebudeme používat ověřování.
  11. Klikněte na Vytvořit.

Tím se vytvoří nový projekt rozhraní API ASP.NET Core v sadě Visual Studio. Nyní vyberte složku Řadiče řešení v okně Průzkumníka řešení a kliknutím na „Přidat -> Řadič…“ vytvořte nový řadič s názvem DefaultController. Tento projekt použijeme k prozkoumání vracejících se dat z metod akcí v následujících částech tohoto článku.

Pokud byste chtěli snadný způsob, jak otestovat metody akcí, které používáme níže, doporučuji využít Postmana. Zde si můžete stáhnout kopii Postmana.

Vytvořte třídy řadiče a modelu v ASP.NET Core

Vytvořte novou složku řešení a pojmenujte ji Modely. Zde umístíte své modelové třídy. Následující výpis kódu ukazuje, jak můžete vytvořit jednoduchou třídu modelu s názvem Author.

veřejná třída Autor

    {

public int Id {get; soubor; }

public string FirstName {get; soubor; }

veřejný řetězec Příjmení {get; soubor; }

    }

Zatím je vše dobré. Nyní nahraďte vygenerovaný kód třídy DefaultController seznamem kódů uvedeným níže.

pomocí Microsoft.AspNetCore.Mvc;

pomocí System.Collections.Generic;

jmenný prostor CoreWebAPI.Controllers

{

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

[ApiController]

veřejná třída DefaultController: ControllerBase

    {

soukromé jen pro čtení Seznam autorů = nový Seznam ();

public DefaultController ()

        {

autoři.Přidat (nový autor ()

            {

Id = 1,

FirstName = "Joydip",

LastName = "Kanjilal"

            });

autoři.Přidat (nový autor ()

            {

Id = 2,

FirstName = "Steve",

LastName = "Smith"

            });

        }

[HttpGet]

public IEnumerable Get ()

        {

vrátit autory;

        }

[HttpGet ("{id}", Name = "Získat")]

public Author Get (int id)

        {

vrátit autory. Najít (x => x.Id == id);

        }

    }

}

Vrátí konkrétní typ z metody akce v ASP.NET Core

Nejjednodušší způsob, jak můžete vrátit data z metody akce, je vrátit konkrétní typ. V seznamu kódů zobrazeném výše metoda Get akce vrátí seznam instancí autora. Tyto instance jsou vytvořeny a inicializovány v konstruktoru třídy DefaultController. Níže je uvedena metoda akce pro vaši potřebu. Všimněte si, že vrací IEnumerable.

[HttpGet]

public IEnumerable Get ()

{

vrátit autory;

}

Počínaje ASP.NET Core 3.0 máte také možnost vrátit IAsyncEnumerable z metody akce. Zatímco IEnumerable provádí iteraci synchronní kolekce, IAsyncEnumerable provádí asynchronní iteraci. IAsyncEnumerable je tedy efektivnější, protože neexistují žádná blokovací volání. (IAsyncEnumerable budu dále diskutovat v budoucím příspěvku zde.)

Zde je možné přepsat předchozí metodu akce pomocí IAsyncEnumerable.

[HttpGet]

public async IAsyncEnumerable Get ()

{

var autoři = čekají na GetAuthors ();

čekat na foreach (var autor v autorech)

   {

autor výnosu z výnosu;

   }

}

Vrátí instanci typu IActionResult z metody akce v ASP.NET Core

Rozhraní IActionResult můžete využít, když chcete vrátit data i kódy HTTP z vaší metody akce. Následující fragment kódu ukazuje, jak toho lze dosáhnout.

[HttpGet]

public IActionResult Get ()

{

if (autoři == null)

vrátit NotFound ("Žádné záznamy");

návrat Ok (autoři);

}

Rozhraní IActionResult je implementováno třídami OkResult, NotFoundResult, CreatedResult, NoContentResult, BadRequestResult, UnauthorizedResult a UnsupportedMediaTypeResult.

V předchozím fragmentu kódu metody NotFound () a Ok () vracejí instance typu IActionResult.

Vrátí instanci typu ActionResult z metody akce v ASP.NET Core

ActionResult byl představen v ASP.NET Core 2.1. ActionResult je typ, který implementuje IActionResult rozhraní. Můžete využít ActionResult návratový typ k vrácení typu, který rozšiřuje ActionResult nebo jakýkoli jiný konkrétní typ (například Autor v našem příkladu).

Následující fragment kódu ukazuje, jak můžeme vrátit ActionResult z metody akce.

[HttpGet]

public ActionResult Dostat()

{

if (autoři == null)

vrátit NotFound ("Žádné záznamy");

vrátit autory;

}

Jak vidíte v předchozím fragmentu kódu, již nemusíte zabalit objekt, který má být vrácen v metodě Ok () - stačí jej vrátit tak, jak je.

Pojďme to teď udělat asynchronní. Zvažte následující asynchronní metodu, která vrací seznam autorů.

soukromá asynchronní úloha GetAuthors ()

{

await Task.Delay (100) .ConfigureAwait (false);

vrátit autory;

}

Asynchronní metoda by měla mít minimálně jeden příkaz await. Pokud nemá žádné příkazy await, kompilátor vygeneruje varování, že metoda bude spuštěna synchronně. Abychom se vyhnuli tomuto varování kompilátoru, očekával jsem volání metody Task.Delay v předchozím fragmentu kódu.

Aktualizovaná metoda akce je uvedena níže. Všimněte si, jak bylo klíčové slovo await použito k vyvolání asynchronní metody, kterou jsme právě vytvořili.

[HttpGet]

veřejná asynchronní úloha<>> Získat ()

{

var data = await GetAuthors ();

if (data == null)

vrátit NotFound ("Žádný záznam");

vrátit data;

}

Můžete také vrátit instanci vlastního ActionResult z vaší metody akce. Vše, co musíte udělat, je vytvořit třídu, která implementuje rozhraní IActionResult a implementuje metodu ExecuteResultAsync. Budeme diskutovat o IActionResult a ActionResult i o vlastních třídách ActionResult v budoucím příspěvku zde.