Baru-baru ini, saat menggunakan WebAPI, browser mengakses WebAPI, dan defaultnya adalah format XML, saya pikir format data yang dikembalikan ini harus dapat disesuaikan oleh pengguna, memungkinkan server untuk mengembalikan format XML atau format JSON, alih-alih kode server untuk dikonfigurasi!
Meskipun kode server dapat dikonfigurasi, saya tidak berpikir itu adalah niat awal WebAPI.
1. Jenis data apa yang dikembalikan WebAPI secara default, json atau xml? 2. Cara memodifikasi tipe data pengembalian WebAPI Saya menggunakan browser IE untuk meminta agar data yang dikembalikan dalam format JSON, dan format data yang dikembalikan oleh Firefox dan Chrome adalah XML, dan kemudian saya menggunakan HttpWebRequest untuk meminta pengembalian adalah format JSON, saya bertanya-tanya, mengapa program yang sama, file konfigurasi yang sama, mengapa format data keluaran berbeda, bahkan jika Anda default output json atau xml dapat dipahami, mengapa ada browser yang berbeda, format outputnya berbeda, Setelah beberapa penelitian, saya akhirnya menemukan alasannya
Setelah pengujian, ditemukan bahwa data yang dikembalikan dengan menggunakan browser IE adalah json, sedangkan menggunakan Firefox dan Chrome adalah xml, dan ditemukan bahwa IE tidak memiliki tipe "application/xml" dibandingkan dengan Firefox dan Chrome ketika permintaan http terjadi. Jadi defaultnya adalah data format json, sedangkan Firefox dan Chrome mengirimkan jenis xml yang dapat diterima, sehingga data xml dikembalikan, dan berikut ini adalah header permintaan IE, Firefox, dan Chrome
Terima hanya muncul di Permintaan
Apa artinya: Jenis media yang dapat diterima di sisi browser
Misalnya, Accept: text/html berarti browser dapat menerima jenis postback dari server sebagai text/html, yang biasa disebut sebagai dokumen html
Jika server tidak dapat mengembalikan data jenis text/html, server harus mengembalikan kesalahan 406 (tidak dapat diterima)
Wildcard * mewakili jenis apa pun
Misalnya, Terima: */* berarti bahwa browser dapat menangani semua jenis, (umumnya browser mengirimkannya ke server)
Misalnya, Terima: text/* berarti semua subkelas teks dapat diterima
Terima dapat mendukung beberapa jenis pemisahan
Misalnya, Terima: audio/*; Q=0.2, audio/basic adalah efek bahwa browser lebih menyukai jenis audio/media dasar, tetapi jika mereka tidak memiliki jenis ini, jenis audio lain juga dapat digunakan
Di sini muncul q=0.2, yang merupakan nilai yang mewakili tingkat asosiasi, dan nilai defaultnya adalah satu, disusun dari terbesar ke terkecil
Misalnya, Terima: teks/biasa; q = 0,5, teks / html, teks / x-dvi; q = 0.8, teks / x-c
Prioritas jenis yang dapat diterima adalah sebagai berikut
1) teks / teks html / x-c
2) teks / x-dvi
3) teks / polos
q adalah nilai antara 0-1, nilai default q adalah 1, dan q = 0 berarti tidak dapat diterima
Akhirnya, hasil tes:
| peramban | Kembali ke pemformatan | Terima Header Permintaan | | yaitu | json | teks/html, aplikasi/xhtml+xml, */* | | Chrome | xml | teks/html, aplikasi/xhtml+xml, aplikasi/xml; q = 0,9, gambar / webp, gambar / apng, * / *; q = 0,8 | | Firefox | xml | teks/html, aplikasi/xhtml+xml, aplikasi/xml; q = 0,9,*/*; q = 0,8,*/* |
Lanjutkan dengan pengujian berikut
1. Hanya menerima: aplikasi/json yang dikirim, dan hasilnya dikembalikan json
2. Hanya accept:application/xml yang dikirim, dan hasilnya mengembalikan xml
3. Kirim accept: application/xml dan application/json secara bersamaan, dan hasilnya mengembalikan json
4. Kirim accept:application/json dan application/xml secara bersamaan, dan hasilnya mengembalikan json
5. Ubah prioritas dan kirim aplikasi/xml secara bersamaan. q = 1.0, aplikasi / json; q=0.9, dan hasilnya mengembalikan xml
Dari sini dapat disimpulkan:
Jenis data pengembalian WebAPI ditentukan oleh penerimaan header permintaan, dan jenis pengembalian default adalah json 1. Jika tidak ada application/json atau application/xml, kembalikan data json 2. Ketika hanya aplikasi/json yang tersedia, kembalikan data json 3. Ketika hanya aplikasi/xml yang tersedia, data xml dikembalikan 4. Ketika ada application/json dan application/json pada saat yang sama, tipe data yang dikembalikan tidak relevan dengan urutan keduanya, jika keduanya memiliki prioritas yang sama, json dikembalikan, dan jika prioritasnya berbeda, jenis dengan prioritas lebih tinggi dikembalikan
| Terima kepala | Jenis pengembalian | | Aplikasi/JSON | json | | aplikasi/xml | xml | | Aplikasi/XML, Aplikasi/JSON | json | | aplikasi/json,aplikasi/xml | json | | aplikasi/xml; q = 1.0, aplikasi / json; q = 1,0 | json | | aplikasi/xml; q = 0.9, aplikasi / json; q = 0,9 | json | | aplikasi/xml; q = 1.0, aplikasi / json; q = 0,9 | xml | | aplikasi/xml; q = 0.9, aplikasi / json; q = 1,0 | json |
Seperti yang ditunjukkan di bawah ini:
|