Bagaimana bekerja dengan ActionResults di Web API

ASP.Net Web API adalah kerangka kerja ringan yang digunakan untuk membangun layanan HTTP tanpa kewarganegaraan dan tenang. Anda dapat memanfaatkan Hasil Tindakan di API Web untuk mengembalikan data dari metode pengontrol API Web.

Mulai

Mari buat proyek API Web terlebih dahulu. Untuk melakukannya, buat proyek ASP.Net kosong di Visual Studio 2015 dan centang kotak API Web saat memilih template proyek. Selanjutnya, simpan proyek dengan nama.

Anda akan melihat bahwa proyek ASP.Net kosong dibuat. Klik kanan pada folder solusi Pengontrol dan klik Tambah -> Pengontrol untuk membuat pengontrol API Web baru. Pilih "Web API 2 Controller - Empty" saat diminta di jendela yang muncul berikutnya. Simpan pengontrol dengan nama. Mari kita asumsikan nama pengontrol untuk contoh ini adalah "DefaultController".

Mari buat kelas entitas bernama Kontak.

public class Contact

    {

        public int Id { get; set; }

        public string FirstName { get; set; }

        public string LastName { get; set; }

    }

Selanjutnya, tambahkan metode berikut ke DefaultController.

public CustomActionResult Get()

        {

            Contact contact = new Contact();

            contact.Id = 1;

            contact.FirstName = "Joydip";

            contact.LastName = "Kanjilal";

            return new CustomActionResult(HttpStatusCode.OK, contact);

        }

Catat penggunaan kelas CustomActionResult saat mengembalikan data dari metode pengontrol. Sekarang mari buat kelas CustomActionResult hanya untuk memastikan bahwa kode Anda terkompilasi - kita akan mengimplementasikan kelas ini nanti.

public class CustomActionResult : IHttpActionResult

    {

        public Task ExecuteAsync(CancellationToken cancellationToken)

        {

            throw new NotImplementedException();

        }

    }

Bekerja dengan ActionResults

Pengontrol API Web Anda dapat mengembalikan salah satu dari jenis nilai berikut:

  • HttpResponseMessage: dalam hal ini API Web Anda akan mengubah nilai yang dikembalikan menjadi objek pesan respons Http dan mengembalikannya.
  • IHttpActionResult: dalam hal ini runtime API Web mengubah nilai yang dikembalikan ke objek pesan respons Http (turunan HttpResponseMessage dibuat secara asinkron) secara internal dan mengembalikannya. Penggunaan antarmuka IHttpActionResult (diperkenalkan di Web API 2) menyederhanakan pengujian unit pengontrol API Web Anda dan juga membungkus pembuatan objek HttpResponseMessage.
  • void: dalam kasus ini, API Web Anda akan mengembalikan respons Http kosong dengan kode status 204.
  • Jenis lain: dalam hal ini, API Web Anda akan memanfaatkan pemformat media yang sesuai untuk membuat serial dan mengembalikan data dari metode pengontrol API Web dengan kode status respons 200.

Potongan kode berikut menunjukkan bagaimana Anda dapat menggunakan pengembalian HttpResponseMessage dari metode pengontrol API Web Anda.

 [Route("contact")]

public HttpResponseMessage Get()

{

    HttpResponseMessage message = Request.CreateResponse(HttpStatusCode.OK, contact);

    return message;

}

Sekarang mari mengimplementasikan hasil tindakan kustom yang akan kita gunakan untuk mengembalikan data dari API Web yang kita buat.

Membuat ActionResult kustom

Untuk membuat kelas hasil tindakan khusus, yang perlu Anda lakukan adalah membuat kelas yang mengimplementasikan antarmuka IActionResult dan mengganti metode ExecuteAsync.

Cuplikan kode berikut menunjukkan bagaimana Anda dapat menggunakan Generik untuk membuat kelas hasil tindakan kustom.

public class CustomActionResult : IHttpActionResult

    {

        private System.Net.HttpStatusCode statusCode;

        T data;

        public CustomActionResult(System.Net.HttpStatusCode statusCode, T data)

        {

            this.statusCode = statusCode;

            this.data = data;

        }

    }

Cuplikan kode berikut menunjukkan bagaimana Anda dapat membuat objek respons, mengisinya dengan data yang diperlukan, dan mengembalikannya.

public HttpResponseMessage CreateResponse(System.Net.HttpStatusCode statusCode, T data)

        {

            HttpRequestMessage request = new HttpRequestMessage();            request.Properties.Add(System.Web.Http.Hosting.HttpPropertyKeys.HttpConfigurationKey, new HttpConfiguration());

            HttpResponseMessage response = request.CreateResponse(statusCode, data);

            return response;

        }

Metode ExecuteAsync memanggil metode CreateResponse dan meneruskan kode status dan data ke sana sebagai parameter.

        public Task ExecuteAsync(CancellationToken cancellationToken)

        {

            return Task.FromResult(CreateResponse(this.statusCode, this.data));

        }

Mengkonsumsi API Web

Untuk menggunakan API Web yang baru saja Anda buat, Anda dapat membuat aplikasi konsol dan kemudian mengimpor paket "WebApiContrib.Formatting.ProtoBuf" ke proyek Anda melalui NuGet.

Dengan asumsi bahwa Anda telah membuat klien untuk menggunakan API Web yang kami terapkan sebelumnya, berikut adalah daftar kode yang menunjukkan bagaimana Anda dapat menggunakan Api Web.

static void Main(string[] args)

        {

            var client = new HttpClient { BaseAddress = new Uri("//localhost:37019/") };

            HttpResponseMessage response = client.GetAsync("api/Default").Result;

            if (response.IsSuccessStatusCode)

            {

                Contact contact = response.Content.ReadAsAsync().Result;

                Console.WriteLine("Id = "+ contact.Id + " First Name: " + contact.FirstName + " Last Name: " + contact.LastName);

            }

            else

            {

                Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);

            }

            Console.ReadKey();

        }