Cara mengembalikan data dari ASP.NET Core Web API

Kami mempunyai tiga cara untuk mengembalikan data dan kod status HTTP dari kaedah tindakan di ASP.NET Core. Anda boleh mengembalikan jenis tertentu, mengembalikan contoh jenis IActionResult, atau mengembalikan contoh jenis ActionResult. 

Walaupun mengembalikan jenis tertentu adalah cara paling mudah, IActionResult membolehkan anda mengembalikan kedua-dua data dan kod HTTP, dan ActionResult memungkinkan anda mengembalikan jenis yang memanjangkan IActionResult. ActionResult dapat digunakan untuk mengirim kod status HTTP, data, atau keduanya dari metode tindakan.

Artikel ini menyajikan perbincangan tentang bagaimana kita dapat mengembalikan data dalam ASP.NET Core Web API menggunakan setiap jenis tersebut, dengan contoh kod yang relevan di C #. 

Untuk bekerja dengan contoh kod yang digambarkan dalam artikel ini, anda harus memasang Visual Studio 2019 dalam sistem anda. Sekiranya anda belum mempunyai salinannya, anda boleh memuat turun Visual Studio 2019 di sini. 

Buat projek ASP.Net Core API

Pertama, mari buat projek Teras ASP.NET di Visual Studio. Dengan mengandaikan Visual Studio 2019 dipasang di sistem anda, ikuti langkah-langkah yang digariskan di bawah untuk membuat projek Teras ASP.NET baru di Visual Studio.

  1. Lancarkan ID Studio Visual.
  2. Klik pada "Buat projek baru."
  3. Di tetingkap "Buat projek baru", pilih "Aplikasi Web Teras ASP.Net" dari senarai templat yang dipaparkan.
  4. Klik Seterusnya.
  5. Di tetingkap "Konfigurasikan projek baru Anda", tentukan nama dan lokasi untuk projek baru.
  6. Klik Buat.
  7. Dalam tetingkap "Buat Aplikasi Web ASP.Net Core Baru" yang ditunjukkan di sebelah, pilih .NET Core sebagai runtime dan ASP.NET Core 2.2 (atau lebih baru) dari senarai juntai bawah di bahagian atas. Saya akan menggunakan ASP.NET Core 3.0 di sini.
  8. Pilih "API" sebagai templat projek untuk membuat aplikasi ASP.NET Core API baru.
  9. Pastikan bahawa kotak centang "Aktifkan Docker Support" dan "Configure for HTTPS" tidak dicentang kerana kami tidak akan menggunakan fitur tersebut di sini.
  10. Pastikan bahawa Pengesahan ditetapkan sebagai "Tanpa Pengesahan" kerana kami juga tidak akan menggunakan pengesahan.
  11. Klik Buat.

Ini akan membuat projek ASP.NET Core API baru di Visual Studio. Sekarang pilih folder penyelesaian Controllers di Window Solution Explorer dan klik "Add -> Controller ..." untuk membuat pengawal baru bernama DefaultController. Kami akan menggunakan projek ini untuk meneroka kembali data dari kaedah tindakan di bahagian seterusnya artikel ini.

Sekiranya anda menginginkan kaedah mudah untuk menguji kaedah tindakan yang kami gunakan di bawah, saya cadangkan untuk memanfaatkan Postman. Anda boleh memuat turun salinan Postman dari sini. 

Buat kelas Pengawal dan Model di ASP.NET Core

Buat folder penyelesaian baru dan beri nama Model. Di sinilah anda akan meletakkan kelas model anda. Penyenaraian kod berikut menggambarkan bagaimana anda boleh membuat kelas model sederhana bernama Author.

Pengarang kelas awam

    {

        id int awam {dapatkan; menetapkan; }

        rentetan awam FirstName {get; menetapkan; }

        rentetan umum LastName {get; menetapkan; }

    }

Setakat ini begitu baik. Sekarang, ganti kod yang dihasilkan dari kelas DefaultController dengan senarai kod yang diberikan di bawah.

menggunakan Microsoft.AspNetCore.Mvc;

menggunakan System.Collections.Generic;

namespace CoreWebAPI.Pengawal

{

    [Laluan ("api / [pengawal]")]

    [ApiController]

    kelas awam DefaultController: ControllerBase

    {

        pengarang Senarai baca peribadi = Senarai baru ()

        DefaultController awam ()

        {

            pengarang. Tambah (Pengarang baru ()

            {

                Id = 1,

                FirstName = "Joydip",

                Nama Akhir = "Kanjilal"

            });

            pengarang. Tambah (Pengarang baru ()

            {

                Id = 2,

                Nama Depan = "Steve",

                Nama Akhir = "Smith"

            });

        }

        [HttpGet]

        awam IEnumerable Get ()

        {

            pengarang kembali;

        }

        [HttpGet ("{id}", Nama = "Dapatkan")]

        Pengarang awam Dapatkan (int id)

        {

            pengarang kembali.Cari (x => x.Id == id);

        }

    }

}

Kembalikan jenis tertentu dari kaedah tindakan dalam ASP.NET Core

Cara termudah untuk mengembalikan data dari kaedah tindakan adalah mengembalikan jenis tertentu. Dalam senarai kod yang ditunjukkan di atas, kaedah Dapatkan tindakan mengembalikan senarai contoh Pengarang. Contoh ini dibuat dan dimulakan dalam konstruktor kelas DefaultController. Berikut adalah kaedah tindakan sekali lagi untuk rujukan anda. Perhatikan bahawa ia mengembalikan IEnumerable. 

[HttpGet]

awam IEnumerable Get ()

{

   pengarang kembali;

}

Bermula dengan ASP.NET Core 3.0, anda juga mempunyai pilihan untuk mengembalikan IAsyncEnumerable dari kaedah tindakan. Walaupun IEnumerable melakukan lelaran koleksi segerak, IAsyncEnumerable melakukan lelaran tak segerak. Oleh itu IAsyncEnumerable lebih cekap kerana tidak ada panggilan yang menyekat. (Saya akan membincangkan IAsyncEnumerable lebih lanjut dalam catatan akan datang di sini.)

Inilah cara anda boleh menulis semula kaedah tindakan sebelumnya menggunakan IAsyncEnumerable.

[HttpGet]

async awam IAsyncEnumerable Get ()

{

   var author = tunggu GetAuthors ();

   waiting forach (penulis dalam penulis)

   {

        penulis hasil pulangan;

   }

}

Kembalikan contoh jenis IActionResult dari kaedah tindakan dalam ASP.NET Core

Anda boleh memanfaatkan antara muka IActionResult apabila anda ingin mengembalikan kedua-dua data dan kod HTTP dari kaedah tindakan anda. Coretan kod berikut menggambarkan bagaimana ini dapat dicapai.

[HttpGet]

IActionResult awam Dapatkan ()

{

  jika (pengarang == null)

      kembali NotFound ("Tiada rekod");

  kembali Ok (pengarang);

}

Antara muka IActionResult dilaksanakan oleh kelas OkResult, NotFoundResult, CreatedResult, NoContentResult, BadRequestResult, UnauthorizedResult, dan UnsupportedMediaTypeResult.

Dalam coretan kod sebelumnya, kaedah NotFound () dan Ok () mengembalikan contoh jenis IActionResult.

Kembalikan contoh jenis ActionResult dari kaedah tindakan dalam ASP.NET Core

ActionResult diperkenalkan dalam ASP.NET Core 2.1. ActionResult adalah jenis yang menerapkan antara muka IActionResult. Anda boleh memanfaatkan jenis pengembalian ActionResult untuk mengembalikan jenis yang memanjangkan ActionResult atau jenis khusus lain (seperti Pengarang dalam contoh kami).

Coretan kod berikut menggambarkan bagaimana kita dapat mengembalikan ActionResult dari kaedah tindakan.

[HttpGet]

Hasil Tindakan awam Dapatkan ()

{

  jika (pengarang == null)

       kembali NotFound ("Tiada rekod");

   pengarang kembali;

}

Seperti yang anda lihat dalam coretan kod sebelumnya, anda tidak perlu lagi membungkus objek yang akan dikembalikan dalam kaedah Ok () - anda boleh mengembalikannya sebagaimana adanya.

Sekarang mari kita menjadikannya tidak segerak. Pertimbangkan kaedah async berikut, yang mengembalikan senarai pengarang.

Tugas penyegerakan peribadi
   
     Dapatkan Pengarang ()
    

{

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

    pengarang kembali;

}

Kaedah tidak segerak harus mempunyai minimum satu pernyataan menunggu. Sekiranya ia tidak mempunyai pernyataan menunggu, penyusun akan menghasilkan amaran yang menyatakan bahawa kaedah itu akan berjalan secara serentak. Untuk mengelakkan amaran penyusun ini, saya telah menunggu panggilan ke kaedah Task.Delay pada coretan kod sebelumnya.

Kaedah tindakan yang dikemas kini disenaraikan di bawah. Perhatikan bagaimana kata kunci tunggu tunggu digunakan untuk menggunakan kaedah async yang baru kita buat.

[HttpGet]

Tugas penyegerakan awam > Dapatkan ()

{

   var data = tunggu GetAuthors ();

   jika (data == null)

        kembali NotFound ("Tiada rekod");

   mengembalikan data;

}

Anda juga dapat mengembalikan contoh ActionResult tersuai dari kaedah tindakan anda. Yang perlu anda buat hanyalah membuat kelas yang melaksanakan antara muka IActionResult dan melaksanakan kaedah ExecuteResultAsync. Kami akan membincangkan IActionResult dan ActionResult serta kelas ActionResult tersuai dalam catatan akan datang di sini.