Programovanie

Ako vrátiť dáta z webového rozhrania ASP.NET Core Web API

Máme tri spôsoby, ako vrátiť údaje a stavové kódy HTTP z metódy akcie v ASP.NET Core. Môžete vrátiť konkrétny typ, inštanciu typu IActionResult alebo inštanciu typu ActionResult.

Aj keď návrat konkrétneho typu je najjednoduchší spôsob, IActionResult vám umožňuje vrátiť údaje aj kódy HTTP a ActionResult vám umožní vrátiť typ, ktorý rozširuje IActionResult. ActionResult možno použiť na odoslanie stavového kódu HTTP, údajov alebo oboch z metódy akcie.

Tento článok predstavuje diskusiu o tom, ako môžeme vrátiť údaje vo webovom rozhraní API ASP.NET Core pomocou každého z týchto typov, s príslušnými príkladmi kódu v jazyku C #.

Ak chcete pracovať s príkladmi kódu ilustrovanými v tomto článku, mali by ste mať vo svojom systéme nainštalovanú aplikáciu Visual Studio 2019. Ak ešte nemáte kópiu, môžete si tu stiahnuť Visual Studio 2019.

Vytvorte projekt rozhrania ASP.Net Core API

Najprv si vytvoríme projekt ASP.NET Core v Visual Studio. Za predpokladu, že je vo vašom systéme nainštalované Visual Studio 2019, postupujte podľa krokov uvedených nižšie a vytvorte nový projekt ASP.NET Core v Visual Studio.

  1. Spustite Visual Studio IDE.
  2. Kliknite na „Vytvoriť nový projekt“.
  3. V okne „Vytvoriť nový projekt“ zo zoznamu zobrazených šablón vyberte možnosť „Webová aplikácia ASP.Net Core“.
  4. Kliknite na Ďalej.
  5. V okne „Konfigurácia nového projektu“ zadajte názov a umiestnenie nového projektu.
  6. Kliknite na tlačidlo Vytvoriť.
  7. V nasledujúcom okne „Vytvorenie novej webovej aplikácie ASP.Net Core“ vyberte z rozbaľovacieho zoznamu v hornej časti .NET Core ako runtime a ASP.NET Core 2.2 (alebo novší). Budem tu používať ASP.NET Core 3.0.
  8. Vyberte „API“ ako šablónu projektu a vytvorte novú aplikáciu API ASP.NET Core.
  9. Skontrolujte, či nie sú začiarknuté políčka „Povoliť podporu Docker“ a „Konfigurovať pre HTTPS“, pretože tu nebudeme tieto funkcie používať.
  10. Skontrolujte, či je overenie nastavené na „Bez overenia“, pretože tiež nebudeme používať overenie.
  11. Kliknite na tlačidlo Vytvoriť.

Týmto sa vytvorí nový projekt rozhrania ASP.NET Core API v Visual Studio. Teraz vyberte priečinok Riešenie ovládačov v okne Prieskumníka riešení a kliknutím na „Pridať -> Ovládač ...“ vytvorte nový ovládač s názvom DefaultController. Tento projekt použijeme na preskúmanie návratových údajov z metód akcií v ďalších častiach tohto článku.

Ak chcete ľahko otestovať metódy akcie, ktoré používame nižšie, odporúčam vám využiť Postmana. Tu si môžete stiahnuť kópiu Poštára.

Vytvorte triedy radiča a modelu v ASP.NET Core

Vytvorte nový priečinok riešenia a pomenujte ho Modely. Tu umiestnite svoje modelové triedy. Nasledujúci zoznam kódov ilustruje, ako môžete vytvoriť jednoduchú triedu modelu s názvom Autor.

verejná trieda Autor

    {

public int Id {get; sada; }

verejný reťazec FirstName {get; sada; }

verejný reťazec Priezvisko {get; sada; }

    }

Zatiaľ je všetko dobré. Teraz nahraďte vygenerovaný kód triedy DefaultController zoznamom kódov uvedeným nižšie.

pomocou Microsoft.AspNetCore.Mvc;

pomocou System.Collections.Generic;

menný priestor CoreWebAPI.Controlers

{

[Route („api / [controller]“)]

[ApiController]

verejná trieda DefaultController: ControllerBase

    {

súkromné ​​iba na čítanie Zoznam autorov = nový Zoznam ();

public DefaultController ()

        {

autorov.Pridať (nový autor ()

            {

Id = 1,

FirstName = "Joydip",

Priezvisko = "Kanjilal"

            });

autorov.Pridať (nový autor ()

            {

Id = 2,

FirstName = "Steve",

Priezvisko = "Smith"

            });

        }

[HttpGet]

verejné IEnumerable Get ()

        {

návratoví autori;

        }

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

public Author Get (int id)

        {

vrátiť autorov. Nájsť (x => x.Id == id);

        }

    }

}

Vrátiť konkrétny typ z metódy akcie v ASP.NET Core

Najjednoduchší spôsob, ako môžete vrátiť údaje z metódy akcie, je vrátiť konkrétny typ. V zozname kódov zobrazenom vyššie metóda získania akcie vráti zoznam inštancií autora. Tieto inštancie sa vytvárajú a inicializujú v konštruktore triedy DefaultController. Nižšie je uvedená metóda akcie, ktorá slúži ako referencia. Všimnite si, že vracia IEnumerable.

[HttpGet]

verejné IEnumerable Get ()

{

návratoví autori;

}

Počnúc ASP.NET Core 3.0 máte tiež možnosť vrátiť IAsyncEnumerable z metódy akcie. Zatiaľ čo IEnumerable vykonáva iteráciu synchrónneho zberu, IAsyncEnumerable robí asynchrónnu iteráciu. IAsyncEnumerable je teda efektívnejší, pretože neexistujú žiadne blokujúce hovory. (IAsyncEnumerable budem ďalej diskutovať v budúcom príspevku tu.)

Týmto spôsobom môžete prepísať predchádzajúcu metódu akcie pomocou IAsyncEnumerable.

[HttpGet]

public async IAsyncEnumerable Get ()

{

var autori = čakajú na GetAuthors ();

await foreach (var autor v autoroch)

   {

autor návratnosti výnosov;

   }

}

Vráti inštanciu typu IActionResult z metódy akcie v ASP.NET Core

Rozhranie IActionResult môžete využiť, keď chcete vrátiť údaje aj kódy HTTP zo svojej metódy akcie. Nasledujúci úryvok kódu ilustruje, ako je to možné dosiahnuť.

[HttpGet]

public IActionResult Get ()

{

if (autori == null)

return NotFound ("Žiadne záznamy");

návrat Ok (autori);

}

Rozhranie IActionResult je implementované triedami OkResult, NotFoundResult, CreatedResult, NoContentResult, BadRequestResult, UnauthorizedResult a UnsupportedMediaTypeResult.

V predchádzajúcom útržku kódu metódy NotFound () a Ok () vracajú inštancie typu IActionResult.

Vráti inštanciu typu ActionResult z metódy akcie v ASP.NET Core

ActionResult bol predstavený v ASP.NET Core 2.1. ActionResult je typ, ktorý implementuje rozhranie IActionResult. Môžete využiť výhod návratového typu ActionResult na vrátenie typu, ktorý rozširuje ActionResult alebo akýkoľvek iný konkrétny typ (napríklad Autor v našom príklade).

Nasledujúci úryvok kódu ilustruje, ako môžeme vrátiť ActionResult z metódy akcie.

[HttpGet]

verejný ActionResult Získať ()

{

if (autori == null)

return NotFound ("Žiadne záznamy");

návratoví autori;

}

Ako vidíte v predchádzajúcom úryvku kódu, objekt, ktorý sa má vrátiť, už nemusíte zabaliť metódou Ok () - stačí ho vrátiť taký, aký je.

Teraz to urobme asynchrónne. Zvážte nasledujúcu asynchronnú metódu, ktorá vráti zoznam autorov.

súkromná asynchrónna úloha GetAuthors ()

{

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

návratoví autori;

}

Asynchrónna metóda by mala mať minimálne jeden príkaz await. Ak nemá žiadne príkazy na čakanie, kompilátor vygeneruje varovanie o tom, že metóda bude bežať synchrónne. Ak sa chcete vyhnúť tomuto varovaniu kompilátora, v predchádzajúcom útržku kódu som čakal na volanie metódy Task.Delay.

Aktualizovaná metóda akcie je uvedená nižšie. Všimnite si, ako sa kľúčové slovo await použilo na vyvolanie asynchronnej metódy, ktorú sme práve vytvorili.

[HttpGet]

verejná asynchrónna úloha<>> Získať ()

{

var data = await GetAuthors ();

if (data == null)

return NotFound ("Žiadny záznam");

návratové údaje;

}

Môžete tiež vrátiť inštanciu vlastného ActionResult z vašej metódy akcie. Všetko, čo musíte urobiť, je vytvoriť triedu, ktorá implementuje rozhranie IActionResult a implementuje metódu ExecuteResultAsync. O IActionResult a ActionResult, ako aj o vlastných triedach ActionResult sa budeme diskutovať v budúcom príspevku tu.