V zadnjem času, ko uporabljam WebAPI, brskalnik dostopa do WebAPI, privzeti pa je XML format, mislim, da bi moral uporabnik prilagoditi ta vrnjeni podatkovni format, kar strežniku omogoča, da vrne XML ali JSON format, namesto strežniške kode za konfiguracijo!
Čeprav je strežniško kodo mogoče konfigurirati, mislim, da to ni bil prvotni namen WebAPI-ja.
1. Kateri tip podatkov WebAPI privzeto vrne, json ali xml? 2. Kako spremeniti tip povratnih podatkov WebAPI Uporabljam brskalnik IE, da zahtevam, da so vrnjeni podatki v JSON formatu, in da je podatkovni format, ki ga vrneta Firefox in Chrome, XML, nato pa uporabim HttpWebRequest, da zahtevam, da je vračilo v JSON formatu. Spraševal sem se, zakaj je isti program, ista konfiguracijska datoteka, zakaj je format izhodnih podatkov drugačen, tudi če privzeto razumete izhodni JSON ali XML, zakaj obstajajo različni brskalniki, izhodni format je drugačen. Po nekaj raziskovanja sem končno ugotovil razlog
Po testiranju so ugotovili, da so podatki, vrnjeni z uporabo brskalnika IE, json, medtem ko Firefox in Chrome uporabljata xml, ter da IE nima tipa "application/xml" v primerjavi s Firefoxom in Chromem, ko se pojavijo http zahteve. Privzeto so podatki v formatu json, medtem ko Firefox in Chrome pošiljata sprejemljive vrste xml, zato se vrnejo xml podatki, naslednje pa je glava zahteve za IE, Firefox in Chrome
Sprejmi se pojavi samo v Prošnjah
Kaj to pomeni: Vrsta medija, ki je sprejemljiva na strani brskalnika
Na primer, Sprejmi: besedilo/html pomeni, da brskalnik lahko sprejme vrsto objave s strežnika kot besedilo/html, kar se običajno imenuje html dokumenti
Če strežnik ne more vrniti podatkov tipa tekst/html, naj vrne napako 406 (nesprejemljivo)
Wildcard * predstavlja katerokoli vrsto
Na primer, Sprejmi: */* pomeni, da brskalnik podpira vse vrste (običajno brskalnik to pošlje strežniku)
Na primer, Sprejmi: besedilo/* pomeni, da so vsi podrazredi besedila sprejemljivi
Accept lahko podpira več vrst ločitev
Na primer, Sprejmi: audio/*; q=0.2, avdio/basic pomeni, da brskalniki raje uporabljajo avdio/basic medijske tipe, če pa tega tipa nimajo, lahko uporabijo tudi druge vrste zvoka
Tukaj se pojavi q=0,2, kar predstavlja stopnjo povezave, privzeta vrednost pa je ena, razporejena od največjega do najmanjšega
Na primer, Sprejmi: besedilo/navadno; q=0,5, besedilo/html, besedilo/x-dvi; q=0,8, besedilo/x-c
Sprejemljive prioritete tipov so naslednje
1) besedilo/html besedilo/x-c
2) besedilo/x-dvi
3) besedilo/navadno
q je vrednost med 0 in 1, privzeta vrednost q je 1, q=0 pa pomeni nesprejemljivo
Nazadnje, rezultati testa:
| brskalnik | Nazaj k oblikovanju | Header Accept Request | | ie | json | text/html, application/xhtml+xml, */* | | Krom | xml | text/html,application/xhtml+xml,application/xml; q=0,9,slika/webp, slika/apng,*/*; q=0,8 | | Firefox | xml | text/html,application/xhtml+xml,application/xml; q=0,9,*/*; q=0,8,*/* |
Nadaljujte z naslednjimi testi
1. Pošlje se le sprejemaj:application/json, rezultat pa je vrnjen json
2. Pošlje se le Accept:application/xml, rezultat pa vrne xml
3. Pošlji sprejmi: aplikacijo/xml in aplikacijo/json hkrati, rezultat pa vrne json
4. Pošljite accept:application/json in application/xml hkrati, rezultat pa vrne json
5. Spremeniti prioriteto in hkrati poslati aplikacijo/xml. q=1.0,application/json; q=0,9, rezultat pa je vrnil xml
Iz tega lahko sklepamo:
Tip povratnih podatkov WebAPI je določen s sprejetjem glave zahteve, privzeti tip vrnitve pa je json 1. Če ne obstajata niti application/json niti application/xml, vrni json podatke 2. Ko je na voljo samo aplikacija/json, vrnite podatke json 3. Ko je na voljo samo aplikacija/xml, se vrnejo xml podatki 4. Ko sta aplikacija/json in aplikacija/json hkrati, je vrnjeni podatkovni tip nepomemben za vrstni red obeh; če imata oba enako prioriteto, se vrne json, in če je prioriteta drugačna, se vrne tip z višjo prioriteto
| Sprejmi glavo | Vrsta vračila | | application/json | json | | application/xml | xml | | application/xml,application/json | json | | application/json,application/xml | json | | application/xml; q=1.0,application/json; q=1.0 | json | | application/xml; q=0,9,application/json; q=0,9 | json | | application/xml; q=1.0,application/json; q=0,9 | xml | | application/xml; q=0,9,application/json; q=1.0 | json |
Kot je prikazano spodaj:
|