Lebih
Bagaimana untuk lulus json data POST ke Web metode API sebagai objek?
ASP.NET MVC4 Web API aplikasi mendefinisikan metode post untuk menyimpan pelanggan. Pelanggan yang berlalu dalam format json di POSTING permintaan tubuh. Pelanggan parameter dalam metode post berisi nilai null untuk properti.
Cara untuk memperbaiki kesalahan ini sehingga diposting data akan dilewatkan sebagai objek pelanggan ?
Jika mungkin Content-Type: application/x-www-form-urlencoded harus digunakan karena saya tidak tahu bagaimana untuk mengubahnya dalam javascript metode yang posting form.
Controller:
public class CustomersController : ApiController {
public object Post([FromBody] Customer customer)
{
return Request.CreateResponse(HttpStatusCode.OK,
new
{
customer = customer
});
}
}
}
public class Customer
{
public string company_name { get; set; }
public string contact_name { get; set; }
}
Permintaan:
POST http://localhost:52216/api/customers HTTP/1.1
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
{"contact_name":"sdfsd","company_name":"ssssd"}
292
9
EDIT : 31/10/2017
Kode yang sama/pendekatan yang akan bekerja untuk Asp.Net Core 2.0 juga. Perbedaan utama adalah, Di asp.net core, web api Mvc controller dan controller yang bergabung bersama-sama untuk satu model kontroler. Begitu anda kembali jenis mungkin
IActionResult
atau salah satu dari itu's pelaksanaan (Ex :OkObjectResult
)Gunakan
Anda perlu menggunakan
JSON.stringify
metode untuk mengubahnya menjadi JSON string ketika anda mengirimkannya,Dan model pengikat akan mengikat json data untuk kelas objek.
Kode di bawah ini akan bekerja dengan baik (diuji)
Hasil
contentType
properti memberitahu server bahwa kita mengirim data dalam format JSON. Sejak kami mengirim JSON data, struktur,model mengikat akan terjadi dengan benar.Jika anda memeriksa ajax request's header, anda dapat melihat bahwa
Content-Type
nilai diatur sebagaiapplication/json
.Jika anda tidak menentukan contentType secara eksplisit, Ia akan menggunakan default jenis konten yang
application/x-www-form-urlencoded;
Edit pada Nov 2015 ke alamat lain yang mungkin isu-isu yang diangkat dalam komentar
Posting obyek yang kompleks
Let's mengatakan anda memiliki kompleks lihat model kelas sebagai web api tindakan parameter metode seperti ini
dan web api end point adalah seperti
Pada saat tulisan ini dibuat, ASP.NET MVC 6 adalah versi stabil terbaru dan di MVC6, Web api MVC controller dan controller yang mewarisi dari
Microsoft.AspNet.Mvc.Controller
kelas dasar.Untuk mengirim data ke metode dari sisi klien, kode di bawah ini harus bekerja dengan baik
Model mengikat bekerja untuk beberapa sifat, tapi tidak semua ! Mengapa ?
Jika anda tidak menghiasi web api metode dengan parameter
[FromBody]
atributDan mengirim model(mentah objek javascript, tidak dalam format JSON) tanpa menentukan contentType nilai properti
Model mengikat akan bekerja untuk televisi properties pada model, bukan sifat yang mana tipe yang lebih kompleks/tipe lain. Dalam kasus kami,
Id
danNama
properties akan benar-benar terikat dengan parameterm
, TapiKategori
properti akan daftar kosong.Masalah yang sama akan terjadi jika anda menggunakan versi pendek,
$.posting
yang akan menggunakan default Content-Type saat mengirim permintaan.Bekerja dengan POSTING di webapi dapat menjadi rumit! Ingin menambah sudah jawaban yang benar..
Akan fokus secara khusus pada POSTING seperti berurusan dengan MENDAPATKAN sepele. Saya don't pikir banyak orang akan mencari di sekitar untuk menyelesaikan masalah dengan MENDAPATKAN dengan webapis. Lagian..
Jika pertanyaan anda - Dalam MVC Web Api, cara - Menggunakan tindakan kustom metode nama lain dari generik HTTP kata kerja? - Melakukan beberapa posting? - Posting beberapa jenis yang sederhana? - Posting jenis kompleks melalui jQuery?
Maka berikut solusi yang mungkin membantu:
Pertama, untuk menggunakan Khusus Tindakan Metode dalam Web API, tambahkan web api rute sebagai:
Dan kemudian anda dapat membuat tindakan metode seperti:
Sekarang, api jQuery berikut dari konsol browser anda
Kedua, untuk melakukan beberapa posting, Itu adalah sederhana, membuat beberapa tindakan metode dan menghias dengan [HttpPost] attrib. Gunakan [ActionName("MyAction")] untuk menetapkan nama kustom, dll. Akan datang ke jQuery di keempat titik di bawah ini
Ketiga, Pertama-tama, posting beberapa SEDERHANA jenis dalam satu tindakan adalah tidak mungkin. Selain itu, ada format khusus untuk posting bahkan tunggal sederhana type (terlepas dari passing parameter dalam string query atau SISA style). Ini adalah titik yang telah saya membenturkan kepala saya dengan Istirahat Klien (seperti Fiddler dan Chrome's Canggih ISTIRAHAT klien ekstensi) dan berburu seluruh web selama hampir 5 jam ketika akhirnya, URL berikut terbukti bisa membantu. Akan mengutip konten yang relevan untuk link bisa menghidupkan orang mati!
PS: Melihat aneh sintaks?
http://forums.asp.net/t/1883467.aspx?The+menerima+nilai+adalah+null+ketika+I+mencoba+untuk+Pos+untuk+saya+Web+Api
Lagian, mari kita dapatkan dari cerita itu. Bergerak di:
Keempat, posting jenis kompleks melalui jQuery, ofcourse, $.ajax() akan segera datang dalam peran:
Mari kita mengatakan tindakan metode yang menerima objek Orang yang memiliki id dan nama. Jadi, dari javascript:
Dan tindakan akan terlihat seperti:
Semua hal di atas, bekerja untuk saya!! Cheers!
I've hanya telah bermain dengan dan menemukan yang agak aneh hasilnya. Katakanlah anda memiliki properti umum di kelas dalam C# seperti ini:
maka anda harus melakukan JSON.stringify trik seperti yang disarankan oleh Shyju dan menyebutnya seperti ini:
Namun, jika anda menentukan getter dan setter pada kelas anda seperti ini:
kemudian anda dapat menyebutnya jauh lebih sederhana:
Ini menggunakan HTTP header:
I'm tidak yakin apa yang's terjadi di sini tapi sepertinya bug (fitur?) dalam rangka. Agaknya berbeda mengikat metode ini adalah panggilan yang berbeda "adapter", dan sementara adapter for application/json satu karya dengan sifat umum, satu untuk bentuk data dikodekan doesn't.
Saya tidak tahu apa yang akan dianggap praktek terbaik sekalipun.
Gunakan JSON.stringify() untuk mendapatkan string dalam format JSON, memastikan bahwa sementara membuat panggilan AJAX anda lulus di bawah ini disebutkan atribut-atribut:
Di bawah ini adalah memberikan kode jquery untuk membuat ajax post panggilan untuk asp.net web api:
Pastikan bahwa anda WebAPI layanan mengharapkan sangat diketik objek dengan struktur yang sesuai dengan JSON bahwa anda lewat. Dan pastikan bahwa anda stringify JSON yang anda POSTing.
Berikut ini adalah JavaScript saya (menggunakan AngluarJS):
Dan di sini adalah saya WebAPI Controller:
Berikut kode untuk mengembalikan data dalam format json ,bukan xml -Web API 2 :-
Masukan baris berikut di file Global.asax
Microsoft memberi contoh yang baik untuk melakukan ini:
https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/sending-html-form-data-part-1
Pertama memvalidasi permintaan
dan daripada menggunakan serial data.
Berikut ini 'Status' sebuah lapangan di kompleks jenis. Serialisasi dilakukan oleh .BERSIH, tidak ada perlu khawatir tentang itu.
1)Di sisi client, anda dapat mengirim anda http.posting permintaan dalam string seperti di bawah ini
2)Kemudian di web api controller anda dapat deserialize
3)Anda ApiReceivedListOfObjects kelas harus menjadi seperti di bawah ini
4)pastikan bahwa serial string (IndexInfo di sini) menjadi seperti di bawah struktur sebelum JsonConvert.DeserializeObject perintah pada langkah 2