Cara meneruskan beberapa parameter ke metode pengontrol API Web

Dalam posting sebelumnya di sini kita menjelajahi pengikatan parameter di Web API. Dalam posting ini, kita akan belajar bagaimana mengirimkan beberapa parameter ke metode pengontrol API Web.

API Web menyediakan metode tindakan yang diperlukan untuk operasi HTTP GET, POST, PUT, dan DELETE. Anda biasanya akan mengirimkan satu objek sebagai parameter ke metode tindakan PUT dan POST. Perhatikan bahwa API Web tidak mendukung penerusan beberapa parameter POST ke metode pengontrol API Web secara default. Tetapi bagaimana jika Anda membuat permintaan POST dengan beberapa objek yang diteruskan sebagai parameter ke metode pengontrol API Web?

Memahami masalahnya

API Web tidak mengizinkan Anda meneruskan beberapa objek kompleks dalam tanda tangan metode metode pengontrol API Web - Anda hanya dapat memposting satu nilai ke metode tindakan API Web. Nilai ini pada gilirannya bahkan bisa menjadi objek yang kompleks. Dimungkinkan untuk meneruskan beberapa nilai meskipun pada operasi POST atau PUT dengan memetakan satu parameter ke konten aktual dan sisanya melalui string kueri.

Kelas pengontrol berikut berisi metode POST bernama Save yang menerima beberapa parameter.

kelas publik AuthorsController: ApiController

    {

        [HttpPost]

        publik HttpResponseMessage Save (int Id, string FirstName, string LastName, string Address)

        {

            // Kode biasa

            return Request.CreateResponse (HttpStatusCode.OK, "Sukses ...");

        }

   }

Sekarang misalkan Anda mencoba memanggil metode pengontrol API Web dari JQuery seperti yang ditunjukkan di bawah ini.

$ .ajax ({

 url: 'api / penulis',

 ketik: 'POST',

 data: {Id: 1, FirstName: 'Joydip', LastName: 'Kanjilal', Address: 'Hyderabad'},

 dataType: 'json',

 sukses: fungsi (data) {

peringatan (data);

}});

Sayangnya, panggilan ini akan gagal karena permintaan ini tidak dapat diproses oleh API Web. Demikian pula, jika Anda memiliki metode pengontrol API Web yang menerima beberapa objek kompleks, Anda tidak akan dapat menjalankan metode ini secara langsung dari klien secara langsung.

[HttpPost]

public HttpResponseMessage PostAuthor (Penulis penulis, string authenticationToken)

{

  // Kode biasa

  return Request.CreateResponse (HttpStatusCode.OK, "Sukses ...");

}

Anda dapat mengirimkan parameter ke metode pengontrol API Web menggunakan atribut [FromBody] atau [FromUri]. Perhatikan bahwa atribut [FromBody] hanya dapat digunakan sekali dalam daftar parameter sebuah metode. Untuk mengulangi, Anda diizinkan untuk meneruskan hanya satu nilai (tipe sederhana atau kompleks) sebagai parameter ke metode pengontrol API Web saat menggunakan atribut [FromBody]. Anda dapat meneruskan sejumlah parameter menggunakan atribut [FromUri] tetapi itu bukan solusi ideal dalam kasus kami.

Dan sekarang, solusinya

Sekarang kita telah memahami apa masalahnya saat meneruskan parameter ke metode pengontrol API Web, mari jelajahi solusi yang mungkin. Salah satu cara untuk mencapainya adalah dengan meneruskan objek kompleks sebagai atribut [FromBody] dan parameter string melalui Uri seperti yang ditunjukkan pada cuplikan kode di bawah ini.

$ .ajax ({

 url: 'api / author? authenticationToken = abcxyz',

 ketik: 'POST',

  data: JSON.stringify (penulis),

 dataType: 'json',

 sukses: fungsi (data) {

   peringatan (data);

}});

Anda perlu mengubah metode pengontrol API Web Anda untuk mengurai string kueri seperti yang ditunjukkan di bawah ini.

[HttpPost]

publik HttpResponseMessage PostAuthor (Penulis penulis)

{

  var data = Request.RequestUri.ParseQueryString ();

  kriteria string = queryItems ["authenticationToken"];

  // Kode biasa untuk menyimpan data di database

  return Request.CreateResponse (HttpStatusCode.OK, "Sukses ...");

}

Nah, tapi bagaimana jika Anda memiliki beberapa objek kompleks untuk diteruskan sebagai parameter ke metode pengontrol API Web? Anda dapat membuat satu objek yang membungkus beberapa parameter. Lihat kelas AuthorRequest yang diberikan di bawah ini.

kelas publik AuthorRequest

   {

      Penulis Penulis publik {get; set; }

      Token string publik {get; set; }

   }

Pada dasarnya, Anda dapat menggabungkan beberapa parameter dalam satu kelas dan menggunakan kelas ini sebagai parameter untuk metode pengontrol API Web Anda.

Berikut adalah metode pengontrol API Web yang diperbarui.

[HttpPost]

publik HttpResponseMessage PostAuthor (permintaan AuthorRequest)

  {

       var author = request.Author;

       var token = request.Token;

       // Kode biasa untuk menyimpan data di database

       return Request.CreateResponse (HttpStatusCode.OK, "Sukses ...");

  }

Anda juga dapat menggunakan JObject untuk mem-parsing beberapa nilai parameter dari sebuah objek.

[HttpPost]

publik HttpResponseMessage PostAuthor (JObject jsonData)

{

    dinamis json = jsonData;

    JObject jauthor = json.Author;

    string token = json.Token;

    var author = jauthor.ToObject ();

    // Kode biasa untuk menyimpan data di database

    return Request.CreateResponse (HttpStatusCode.OK, "Sukses ...");

}

Cara lain untuk mengatasinya adalah dengan menggunakan FormDataCollection. Kebetulan, FormDataCollection adalah kumpulan pasangan kunci / nilai seperti FormCollection di MVC.

[HttpPost]

        publik HttpResponseMessage PostAuthor (formulir FormDataCollection)

        {

            var author = form.Get ("Penulis");

            var token = form.Get ("Token");

            // Kode biasa untuk menyimpan data di database

            return Request.CreateResponse (HttpStatusCode.OK, "Sukses ...");

        }

Berkat ekstensibilitas kerangka API Web, Anda juga dapat membuat pengikat parameter khusus Anda sendiri dengan memperluas kelas HttpParameterBinding guna memberikan dukungan untuk beberapa pengikatan parameter.

Cara melakukan lebih banyak di ASP.NET dan ASP.NET Core:

  • Cara menggunakan cache dalam memori di ASP.NET Core
  • Bagaimana menangani kesalahan di ASP.NET Web API
  • Cara meneruskan beberapa parameter ke metode pengontrol API Web
  • Cara log permintaan dan respons metadata di ASP.NET Web API
  • Cara bekerja dengan HttpModules di ASP.NET
  • Versi lanjutan dalam ASP.NET Core Web API
  • Cara menggunakan injeksi ketergantungan di ASP.NET Core
  • Cara bekerja dengan sesi di ASP.NET
  • Bagaimana bekerja dengan HTTPHandlers di ASP.NET
  • Cara menggunakan IHostedService di ASP.NET Core
  • Cara menggunakan layanan sabun WCF di ASP.NET Core
  • Cara meningkatkan kinerja aplikasi ASP.NET Core
  • Cara menggunakan ASP.NET Core Web API menggunakan RestSharp
  • Cara bekerja dengan masuk ke ASP.NET Core
  • Cara menggunakan MediatR di ASP.NET Core
  • Cara bekerja dengan status sesi di ASP.NET Core
  • Cara menggunakan Nancy di ASP.NET Core
  • Pahami pengikatan parameter di ASP.NET Web API
  • Cara mengupload file di ASP.NET Core MVC
  • Bagaimana menerapkan penanganan pengecualian global di ASP.NET Core Web API
  • Cara menerapkan pemeriksaan kesehatan di ASP.NET Core
  • Praktik terbaik dalam caching di ASP.NET
  • Cara menggunakan perpesanan Apache Kafka di .NET
  • Cara mengaktifkan CORS di API Web Anda
  • Kapan menggunakan WebClient vs. HttpClient vs. HttpWebRequest
  • Cara bekerja dengan Redis Cache di .NET
  • Kapan menggunakan Task.WaitAll vs. Task.WhenAll di .NET