Programmēšana

Kā atgriezt datus no ASP.NET Core Web API

Mums ir trīs veidi, kā datus un HTTP statusa kodus atgriezt no darbības metodes ASP.NET Core. Varat atgriezt noteiktu tipu, atgriezt IActionResult tipa gadījumu vai atgriezt ActionResult tipa gadījumu.

Lai gan konkrēta veida atgriešana ir vienkāršākais veids, IActionResult ļauj atgriezt gan datus, gan HTTP kodus, bet ActionResult ļauj atgriezt tipu, kas paplašina IActionResult. ActionResult var izmantot, lai nosūtītu HTTP statusa kodu, datus vai abus no darbības metodes.

Šajā rakstā ir sniegta diskusija par to, kā mēs varam atgriezt datus ASP.NET Core Web API, izmantojot katru no šiem veidiem, ar atbilstošiem kodu piemēriem C #.

Lai strādātu ar šajā rakstā ilustrētajiem kodu piemēriem, sistēmā jābūt instalētai Visual Studio 2019. Ja jums vēl nav kopijas, varat lejupielādēt Visual Studio 2019 šeit.

Izveidojiet ASP.Net Core API projektu

Vispirms izveidosim ASP.NET Core projektu Visual Studio. Pieņemot, ka Visual Studio 2019 ir instalēta jūsu sistēmā, veiciet tālāk norādītās darbības, lai izveidotu jaunu ASP.NET Core projektu Visual Studio.

  1. Palaidiet Visual Studio IDE.
  2. Noklikšķiniet uz “Izveidot jaunu projektu”.
  3. Logā “Izveidot jaunu projektu” parādīto veidņu sarakstā atlasiet “ASP.Net Core Web Application”.
  4. Noklikšķiniet uz Tālāk.
  5. Logā “Konfigurēt jauno projektu” norādiet jaunā projekta nosaukumu un vietu.
  6. Noklikšķiniet uz Izveidot.
  7. Nākamajā logā “Izveidot jaunu ASP.Net Core tīmekļa lietojumprogrammu” augšpusē esošajā nolaižamajā sarakstā atlasiet .NET Core kā izpildlaiku un ASP.NET Core 2.2 (vai jaunāku). Es šeit izmantošu ASP.NET Core 3.0.
  8. Atlasiet “API” kā projekta veidni, lai izveidotu jaunu ASP.NET Core API lietojumprogrammu.
  9. Pārliecinieties, vai nav atzīmētas izvēles rūtiņas “Iespējot Docker atbalstu” un “Konfigurēt HTTPS”, jo mēs šeit neizmantosim šīs funkcijas.
  10. Pārliecinieties, ka autentifikācija ir iestatīta kā “Nav autentifikācijas”, jo mēs arī neizmantosim autentifikāciju.
  11. Noklikšķiniet uz Izveidot.

Tādējādi Visual Studio tiks izveidots jauns ASP.NET Core API projekts. Tagad Solution Explorer logā atlasiet Controllers solution mapi un noklikšķiniet uz “Add -> Controller…”, lai izveidotu jaunu kontrolieri ar nosaukumu DefaultController. Mēs izmantosim šo projektu, lai izpētītu datu atgriešanu no darbības metodēm šī raksta nākamajās sadaļās.

Ja vēlaties vienkāršu veidu, kā pārbaudīt darbības metodes, kuras mēs izmantojam tālāk, iesaku izmantot Postman priekšrocības. Pastnieka eksemplāru varat lejupielādēt šeit.

Izveidojiet kontroliera un modeļa klases ASP.NET Core

Izveidojiet jaunu risinājumu mapi un nosauciet to Modeļi. Šeit jūs izvietosiet savas modeļu klases. Šis kodu saraksts parāda, kā jūs varat izveidot vienkāršu modeļu klasi ar nosaukumu Autors.

sabiedrības klase Autors

    {

public int Id {get; komplekts; }

publiskā virkne FirstName {get; komplekts; }

publiskā virkne Uzvārds {get; komplekts; }

    }

Tik tālu, labi. Tagad nomainiet DefaultController klases ģenerēto kodu ar zemāk norādīto kodu sarakstu.

izmantojot Microsoft.AspNetCore.Mvc;

izmantojot System.Collections.Generic;

nosaukumvieta CoreWebAPI. Kontrolieri

{

[Maršruts ("api / [kontrolieris]")]

[ApiController]

publiskā klase DefaultController: ControllerBase

    {

privāti lasāms Tikai saraksta autori = new Saraksts ();

public DefaultController ()

        {

autori. Pievienot (jauns autors ()

            {

Id = 1,

Vārds = "Joydip",

Uzvārds = "Kanjilal"

            });

autori. Pievienot (jauns autors ()

            {

Id = 2,

Vārds = "Stīvs",

Uzvārds = "Smits"

            });

        }

[HttpGet]

public IEnumerable Get ()

        {

atgriešanās autori;

        }

[HttpGet ("{id}", nosaukums = "Iegūt")]

publiskais autors Get (int id)

        {

atgriešanās autori. Atrodiet (x => x.Id == id);

        }

    }

}

Atgrieziet noteiktu veidu no darbības metodes ASP.NET Core

Vienkāršākais veids, kā atgriezt datus no darbības metodes, ir konkrēta veida atgriešana. Iepriekš parādītajā kodu sarakstā metode Saņemt darbību atgriež Autora gadījumu sarakstu. Šie gadījumi tiek izveidoti un inicializēti DefaultController klases konstruktorā. Tālāk ir sniegta darbības metode jūsu atsaucei. Ņemiet vērā, ka tas atgriež IEnumerable.

[HttpGet]

public IEnumerable Get ()

{

atgriešanās autori;

}

Sākot ar ASP.NET Core 3.0, jums ir arī iespēja atgriezt IAsyncEnumerable no darbības metodes. Kamēr IEnumerable veic sinhronu kolekcijas atkārtojumu, IAsyncEnumerable veic asinhrono iterāciju. Tādējādi IAsyncEnumerable ir efektīvāka, jo nav bloķējošu zvanu. (IAsyncEnumerable es apspriedīšu turpmāk šeit.)

Lūk, kā jūs varat pārrakstīt iepriekšējo darbības metodi, izmantojot IAsyncEnumerable.

[HttpGet]

public async IAsyncEnumerable Get ()

{

var autori = gaida GetAuthors ();

gaidīt foreach (autors autors)

   {

ienesīguma atdeves autors;

   }

}

Atgrieziet IActionResult tipa gadījumu no darbības metodes ASP.NET Core

IActionResult saskarnes priekšrocības varat izmantot, kad vēlaties no darbības metodes atgriezt gan datus, gan HTTP kodus. Šis koda fragments parāda, kā to var panākt.

[HttpGet]

public IActionResult Get ()

{

ja (autori == nulle)

return NotFound ("Nav ierakstu");

atgriezties Ok (autori);

}

IActionResult saskarni ievieš klases OkResult, NotFoundResult, CreatedResult, NoContentResult, BadRequestResult, UnauthorizedResult un UnsupportedMediaTypeResult.

Iepriekšējā koda fragmentā metodes NotFound () un Ok () atgriež IActionResult tipa gadījumus.

Atgrieziet ActionResult tipa gadījumu no darbības metodes ASP.NET Core

ActionResult tika ieviests ASP.NET Core 2.1. ActionResult ir tips, kas ievieš IActionResult saskarni. Varat izmantot ActionResult atgriešanās veida priekšrocības, lai atgrieztu veidu, kas paplašina ActionResult, vai jebkuru citu specifisku tipu (piemēram, mūsu piemērā Autors).

Šis koda fragments parāda, kā mēs varam atgriezt ActionResult no darbības metodes.

[HttpGet]

publisks ActionResult Gūt()

{

ja (autori == nulle)

return NotFound ("Nav ierakstu");

atgriešanās autori;

}

Kā redzat iepriekšējā koda fragmentā, jums vairs nav jāiesaiņo atdodamais objekts metodē Ok () - jūs varat to vienkārši atgriezt tādu, kāds tas ir.

Tagad to padarīsim asinhronu. Apsveriet šādu asinhrono metodi, kas atgriež autoru sarakstu.

privāts asinhronais uzdevums GetAuthors ()

{

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

atgriešanās autori;

}

Asinhronai metodei jābūt vismaz vienam gaidīšanas paziņojumam. Ja tam nav gaidīšanas paziņojumu, kompilators ģenerēs brīdinājumu, ka metode darbosies sinhroni. Lai izvairītos no šī kompilatora brīdinājuma, es gaidīju zvanu uz metodi Task.Delay iepriekšējā koda fragmentā.

Atjauninātā darbības metode ir norādīta zemāk. Ievērojiet, kā gaidīšanas atslēgvārds ir izmantots, lai izsauktu tikko izveidoto asinhrono metodi.

[HttpGet]

publiskais asinhronais uzdevums<>> Iegūt ()

{

var dati = gaida GetAuthors ();

ja (dati == nulle)

return NotFound ("Nav ieraksta");

atgriešanās dati;

}

Varat arī atgriezt pielāgotas ActionResult instanci no savas darbības metodes. Viss, kas jums jādara, ir izveidot klasi, kas ievieš saskarni IActionResult un īsteno metodi ExecuteResultAsync. Turpmākajā ierakstā šeit apspriedīsim IActionResult un ActionResult, kā arī pielāgotas ActionResult klases.