Menggunakan ASP.NET Web API yang lebih baru , di Chrome saya melihat XML - bagaimana saya bisa mengubahnya untuk meminta JSON sehingga saya bisa melihatnya di browser? Saya yakin itu hanya bagian dari header permintaan, apakah saya benar dalam hal itu?
json
google-chrome
asp.net-web-api
naspinski
sumber
sumber
Jawaban:
Saya hanya menambahkan yang berikut di
App_Start / WebApiConfig.cs
kelas dalam proyek API Web MVC saya .Itu memastikan Anda mendapatkan JSON pada sebagian besar kueri, tetapi Anda bisa mendapatkannya
XML
saat Anda mengirimtext/xml
.Jika Anda perlu memiliki respon
Content-Type
sebagaiapplication/json
silahkan cek jawaban Todd bawah .NameSpace
sedang menggunakanSystem.Net.Http.Headers
.sumber
Content-Type
tajuk respons masih akantext/html
.Jika Anda melakukan ini di
WebApiConfig
Anda akan mendapatkan JSON secara default, tetapi masih akan memungkinkan Anda untuk mengembalikan XML jika Anda lulustext/xml
sebagaiAccept
header permintaanJika Anda tidak menggunakan jenis proyek MVC dan karena itu tidak memiliki kelas ini untuk memulai, lihat jawaban ini untuk detail tentang cara memasukkannya.
sumber
application/xml
dengan prioritas 0,9 dan*/*
dengan prioritas 0,8. Dengan menghapusapplication/xml
Anda menghapus kemampuan API Web untuk mengembalikan XML jika klien memintanya secara khusus. mis. jika Anda mengirim "Terima: aplikasi / xml" Anda masih akan menerima JSON.Menggunakan RequestHeaderMapping berfungsi lebih baik, karena ia juga mengatur
Content-Type = application/json
header respons, yang memungkinkan Firefox (dengan add-on JSONView) untuk memformat respons sebagai JSON.sumber
Saya suka pendekatan Felipe Leusin yang terbaik - pastikan browser mendapatkan JSON tanpa mengurangi negosiasi konten dari klien yang benar-benar menginginkan XML. Satu-satunya bagian yang hilang bagi saya adalah bahwa header respons masih berisi tipe konten: teks / html. Mengapa itu menjadi masalah? Karena saya menggunakan ekstensi Chrome JSON Formatter , yang memeriksa tipe konten, dan saya tidak mendapatkan format cantik seperti biasa. Saya memperbaikinya dengan pemformat kustom sederhana yang menerima permintaan teks / html dan mengembalikan respons aplikasi / json:
Daftarkan seperti ini:
sumber
this.SerializerSettings.Formatting = Formatting.Indented;
jika Anda ingin itu cukup dicetak tanpa ekstensi browser.using System.Net.Http.Formatting
danusing Newtonsoft.Json
MVC4 Tip Cepat # 3 – Menghapus Formatter XML dari ASP.Net Web API
Di
Global.asax
tambahkan baris:seperti itu:
sumber
Di WebApiConfig.cs , tambahkan ke akhir fungsi Daftar :
Sumber .
sumber
Di Global.asax saya menggunakan kode di bawah ini. URI saya untuk mendapatkan JSON adalah
http://www.digantakumar.com/api/values?json=true
sumber
Lihatlah negosiasi konten di WebAPI. Ini ( Bagian 1 & Bagian 2 ) posting blog sangat rinci dan menyeluruh menjelaskan cara kerjanya.
Singkatnya, Anda benar, dan hanya perlu mengatur
Accept
atauContent-Type
meminta tajuk. Mengingat Aksi Anda tidak dikodekan untuk mengembalikan format tertentu, Anda dapat mengaturAccept: application/json
.sumber
Karena pertanyaannya adalah khusus Chrome, Anda bisa mendapatkan ekstensi tukang pos yang memungkinkan Anda mengatur jenis konten permintaan.
sumber
network.http.accept.default
konfigurasi menjaditext/html,application/xhtml+xml,application/json;q=0.9,application/xml;q=0.8,*/*;q=0.7
.text/html,application/xhtml+xml;q=1.0,*/*;q=0.7
untuk menghindari host buggy seperti Bitbucket dari sengaja melayani browser JSON Anda sebagai pengganti HTML.Salah satu opsi cepat adalah menggunakan spesialisasi MediaTypeMapping. Berikut adalah contoh penggunaan QueryStringMapping dalam acara Application_Start:
Sekarang setiap kali url berisi querystring? A = b dalam hal ini, respons Json akan ditampilkan di browser.
sumber
Kode ini menjadikan json sebagai standar saya dan memungkinkan saya untuk menggunakan format XML juga. Saya hanya akan menambahkan
xml=true
.Terimakasih semuanya!
sumber
Jangan gunakan browser Anda untuk menguji API Anda.
Alih-alih, coba gunakan klien HTTP yang memungkinkan Anda menentukan permintaan Anda, seperti CURL, atau bahkan Fiddler.
Masalah dengan masalah ini ada di klien, bukan di API. API web berperilaku dengan benar, sesuai dengan permintaan browser.
sumber
Sebagian besar jawaban di atas masuk akal. Karena Anda melihat data diformat dalam format XML, itu artinya formatter XML diterapkan, jadi Anda dapat melihat format JSON hanya dengan menghapus XMLFormatter dari parameter HttpConfiguration seperti
karena JSON adalah format default
sumber
Saya menggunakan filter tindakan global untuk menghapus
Accept: application/xml
ketikaUser-Agent
header berisi "Chrome":Tampaknya bekerja.
sumber
Saya menemukan aplikasi Chrome "Klien Lanjutan REST" sangat bagus untuk bekerja dengan layanan REST. Anda dapat mengatur Jenis-Konten untuk
application/json
antara lain: Klien REST Lanjutansumber
Mengembalikan format yang benar dilakukan oleh formatter tipe media. Seperti yang disebutkan orang lain, Anda dapat melakukan ini di
WebApiConfig
kelas:Untuk lebih lanjut, periksa:
Jika tindakan Anda mengembalikan XML (yang merupakan kasus secara default) dan Anda hanya perlu metode khusus untuk mengembalikan JSON, Anda kemudian dapat menggunakan
ActionFilterAttribute
dan menerapkannya ke tindakan tertentu.Atribut filter:
Berlaku untuk tindakan:
Perhatikan bahwa Anda dapat menghilangkan kata
Attribute
pada dekorasi aksi dan menggunakan hanya[JsonOutput]
sebagai gantinya[JsonOutputAttribute]
.sumber
sumber
sesuai versi terbaru ASP.net WebApi 2,
di bawah
WebApiConfig.cs
, ini akan berhasilsumber
Tidak jelas bagi saya mengapa ada semua kompleksitas dalam jawabannya. Tentu ada banyak cara Anda bisa melakukan ini, dengan QueryStrings, header, dan opsi ... tapi apa yang saya yakini sebagai praktik terbaik itu sederhana. Anda meminta URL polos (mis .:)
http://yourstartup.com/api/cars
dan sebagai imbalannya Anda mendapatkan JSON. Anda mendapatkan JSON dengan tajuk respons yang tepat:Dalam mencari jawaban untuk pertanyaan yang sama ini, saya menemukan utas ini, dan harus terus maju karena jawaban yang diterima ini tidak bekerja dengan tepat. Saya memang menemukan jawaban yang saya rasa terlalu sederhana untuk tidak menjadi yang terbaik:
Atur formatter WebAPI default
Saya akan menambahkan tip saya di sini juga.
Saya memang memiliki pertanyaan tentang dari mana asalnya (setidaknya yang saya lihat) berasal. Apakah mereka. NET default, atau mungkin dibuat di tempat lain (oleh orang lain di proyek saya). Bagaimanapun, semoga ini membantu.
sumber
Berikut adalah solusi yang mirip dengan jayson.centeno dan jawaban lainnya, tetapi menggunakan ekstensi bawaan dari
System.Net.Http.Formatting
.Solusi ini terutama diarahkan untuk mendukung $ format untuk OData di rilis awal WebApi, tetapi juga berlaku untuk implementasi non-OData, dan mengembalikan
Content-Type: application/json; charset=utf-8
header dalam respons.Hal ini memungkinkan Anda untuk menempelkan
&$format=json
atau&$format=xml
ke akhir uri Anda saat menguji dengan browser. Itu tidak mengganggu perilaku yang diharapkan lainnya saat menggunakan klien non-browser tempat Anda dapat mengatur tajuk Anda sendiri.sumber
Anda bisa menggunakan seperti di bawah ini:
sumber
Cukup tambahkan dua baris kode di kelas WebApiConfig Anda
sumber
Anda baru saja mengubah
App_Start/WebApiConfig.cs
seperti ini:sumber
Dari MSDN, Membangun Aplikasi Halaman Tunggal dengan ASP.NET dan AngularJS (sekitar 41 menit).
Seharusnya saat ini, saya mencobanya dan berhasil.
sumber
Beberapa waktu telah berlalu sejak pertanyaan ini ditanyakan (dan dijawab) tetapi opsi lain adalah menimpa header Terima di server selama pemrosesan permintaan menggunakan MessageHandler seperti di bawah ini:
Di mana
someOtherCondition
bisa apa saja termasuk tipe peramban, dll. Ini akan menjadi kasus bersyarat di mana hanya kadang-kadang kita ingin mengganti negosiasi konten default. Kalau tidak sesuai jawaban lain, Anda hanya akan menghapus formatter yang tidak perlu dari konfigurasi.Anda harus mendaftarkannya, tentu saja. Anda dapat melakukan ini secara global:
atau berdasarkan rute dengan rute:
Dan karena ini adalah penangan pesan, pesan itu akan berjalan baik pada permintaan dan respons ujung pipa seperti sebuah
HttpModule
. Jadi, Anda dapat dengan mudah mengakui penggantian dengan tajuk khusus:sumber
Ini adalah cara termudah yang saya gunakan dalam aplikasi saya. Tambahkan diberikan di bawah 3 baris kode
App_Start\\WebApiConfig.cs
dalamRegister
fungsiAsp.net web API akan secara otomatis membuat serial objek Anda yang kembali ke JSON dan seperti yang
application/json
ditambahkan di header sehingga browser atau penerima akan memahami bahwa Anda mengembalikan hasil JSON.sumber
WebApiConfig adalah tempat di mana Anda dapat mengkonfigurasi apakah Anda ingin menghasilkan json atau xml. secara default xml. dalam fungsi register kita dapat menggunakan HttpConfiguration Formatters untuk memformat output. System.Net.Http.Headers => MediaTypeHeaderValue ("text / html") diperlukan untuk mendapatkan output dalam format json.
sumber
Menggunakan jawaban Felipe Leusin selama bertahun-tahun, setelah pembaruan terbaru dari perpustakaan inti dan Json.Net, saya bertemu dengan
System.MissingMethodException
: SupportedMediaTypes. Solusi dalam kasus saya, semoga bermanfaat bagi orang lain yang mengalami pengecualian tak terduga yang sama, adalah menginstalSystem.Net.Http
. NuGet tampaknya menghapusnya dalam beberapa keadaan. Setelah instalasi manual, masalah terselesaikan.sumber
Saya heran melihat begitu banyak balasan yang memerlukan pengkodean untuk mengubah penggunaan tunggal (GET) dalam satu API alih-alih menggunakan alat yang tepat apa yang harus diinstal sekali dan dapat digunakan untuk API apa pun (milik sendiri atau pihak ketiga) dan semua gunakan kasing.
Jadi jawabannya adalah:
sumber