Mengapa atribut FromBody
dan FromUri
diperlukan di ASP.NET Web API`?
Apa perbedaan antara menggunakan atribut dan tidak menggunakannya?
asp.net-web-api
Rajneesh
sumber
sumber
Jawaban:
Ketika ASP.NET Web API memanggil metode pada pengontrol, ia harus menetapkan nilai untuk parameter, proses yang disebut pengikatan parameter .
Secara default, API Web menggunakan aturan berikut untuk mengikat parameter:
Jika parameternya adalah tipe "sederhana" , API Web mencoba untuk mendapatkan nilai dari URI . Tipe sederhana termasuk .NET tipe primitif (int, bool, dobel, dan sebagainya), ditambah TimeSpan, DateTime, Guid, desimal, dan string, ditambah semua tipe dengan konverter tipe yang dapat dikonversi dari sebuah string.
Untuk tipe yang kompleks , API Web mencoba membaca nilai dari badan pesan , menggunakan formatter tipe media.
Jadi, jika Anda ingin mengganti perilaku default di atas dan memaksa Web API untuk membaca tipe kompleks dari URI, tambahkan
[FromUri]
atribut ke parameter. Untuk memaksa API Web untuk membaca tipe sederhana dari badan permintaan, tambahkan[FromBody]
atribut ke parameter.Jadi, untuk menjawab pertanyaan Anda, kebutuhan atribut
[FromBody]
dan[FromUri]
di API Web hanya untuk menimpa, jika perlu, perilaku default seperti dijelaskan di atas. Perhatikan bahwa Anda dapat menggunakan kedua atribut untuk metode pengontrol, tetapi hanya untuk parameter yang berbeda, seperti yang ditunjukkan di sini .Ada lebih banyak informasi di web jika Anda Google "web api parameter binding".
sumber
JustGetIt
yang melayani tujuan yang sama untuk menambahkan beberapa atribut seperti[FromBody, FromQuery]
dllPerilaku default adalah:
Jika parameter adalah primitif jenis (
int
,bool
,double
, ...), Web API mencoba untuk mendapatkan nilai dari URI permintaan HTTP.Untuk tipe kompleks (objek Anda sendiri, misalnya
Person
:), Web API mencoba membaca nilai dari badan permintaan HTTP.Jadi, jika Anda memiliki:
... maka Anda tidak perlu menambahkan atribut apa pun (tidak
[FromBody]
juga[FromUri]
).Tetapi, jika Anda memiliki tipe primitif di tubuh , maka Anda harus menambahkan
[FromBody]
di depan parameter tipe primitif Anda dalam metode pengontrol WebAPI Anda. (Karena, secara default, WebAPI mencari tipe primitif di URI dari permintaan HTTP.)Atau, jika Anda memiliki tipe kompleks di URI Anda , maka Anda harus menambahkan
[FromUri]
. (Karena, secara default, WebAPI mencari tipe kompleks di tubuh permintaan HTTP secara default.)Tipe primitif:
Jenis kompleks:
Ini berfungsi selama Anda hanya mengirim satu parameter dalam permintaan HTTP Anda. Saat mengirim beberapa , Anda perlu membuat model khusus yang memiliki semua parameter Anda seperti ini:
Dari dokumentasi Microsoft untuk pengikatan parameter di ASP.NET Web API :
sumber
Selain jawaban di atas ..
[FromUri] juga dapat digunakan untuk mengikat tipe kompleks dari parameter uri alih-alih melewati parameter dari querystring
Misalnya ..
Dapat disebut seperti:
sumber
Ketika parameter memiliki [FromBody], Web API menggunakan header Tipe-Konten untuk memilih formatter. Dalam contoh ini, tipe konten adalah "application / json" dan tubuh permintaan adalah string JSON mentah (bukan objek JSON).
Paling banyak satu parameter diizinkan untuk membaca dari badan pesan. Jadi ini tidak akan berfungsi:
Alasan aturan ini adalah bahwa badan permintaan mungkin disimpan dalam aliran non-buffered yang hanya dapat dibaca sekali
Silakan kunjungi situs web untuk lebih jelasnya: http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api
sumber