V poslednej dobe, keď používam WebAPI, prehliadač pristupuje k WebAPI a predvoleným je XML formát, myslím, že tento vrátený dátový formát by mal byť používateľom prispôsobiteľný, aby server mohol vrátiť XML formát alebo JSON formát namiesto serverového kódu na konfiguráciu!
Aj keď sa serverový kód dá nakonfigurovať, nemyslím si, že to bol pôvodný zámer WebAPI.
1. Aký typ dát WebAPI štandardne vracia, json alebo xml? 2. Ako upraviť typ vrátených dát WebAPI Používam prehliadač IE, aby som požiadal, aby vrátené dáta boli vo formáte JSON, a formát dát vrátený Firefoxom a Chromem je XML, a potom používam HttpWebRequest na požiadanie, aby vrátenie bolo vo formáte JSON, premýšľal som, prečo je ten istý program, rovnaký konfiguračný súbor, prečo je formát výstupných dát odlišný, aj keď je predvolený výstupný json alebo xml zrozumiteľný, prečo sú rôzne prehliadače, výstupný formát je iný, Po istom pátraní som konečne zistil dôvod
Po testovaní sa zistilo, že dáta vrátené používaním prehliadača IE sú json, zatiaľ čo Firefox a Chrome sú xml, a zistilo sa, že IE nemá typ "application/xml" v porovnaní s Firefoxom a Chrome, keď sa vyskytujú HTTP požiadavky. Predvolené sú teda json formátované dáta, zatiaľ čo Firefox a Chrome posielajú prijateľné xml typy, takže xml dáta sa vracajú, a nasleduje požiadavková hlavička IE, Firefoxu a Chrome
Prijať sa zobrazuje iba v Požiadavkách
Čo to znamená: Typ médií, ktoré sú prijateľné na strane prehliadača
Napríklad Accept: text/html znamená, že prehliadač môže akceptovať typ postbacku zo servera ako text/html, čo sa bežne označuje ako html dokumenty
Ak server nemôže vrátiť údaje typu text/html, mal by vrátiť chybu 406 (neprijateľné)
Žolík * predstavuje akýkoľvek typ
Napríklad Accept: */* znamená, že prehliadač zvládne všetky typy (zvyčajne prehliadač toto odosiela serveru)
Napríklad Accept: text/* znamená, že všetky podtriedy textu sú prijateľné
Accept môže podporovať viacero typov oddelení
Napríklad, Akceptovať: audio/*; Q=0.2, audio/basic znamená, že prehliadače preferujú audio/základné mediálne typy, ale ak tento typ nemajú, môžu sa použiť aj iné audio typy
Tu sa objavuje q=0,2, čo je hodnota reprezentujúca stupeň asociácie, a predvolená hodnota je jedna, usporiadaná od najväčšieho po najmenšie
Napríklad Akceptovať: text/plain; q=0,5, text/html, text/x-dvi; q=0,8, text/x-c
Prijateľné typy priorít sú nasledovné
1) text/html text/x-c
2) text/x-dvi
3) text/obyčajné
q je hodnota medzi 0-1, predvolená hodnota q je 1 a q=0 znamená neprijateľné
Nakoniec výsledky testov:
| prehliadač | Návrat k formátovaniu | Hlavička prijať požiadavku | | ie | json | text/html, application/xhtml+xml, */* | | Chróm | xml | text/html,application/xhtml+xml,application/xml; q=0,9,image/webp,image/apng,*/*; q=0,8 | | Firefox | xml | text/html,application/xhtml+xml,application/xml; q=0,9,*/*; q=0,8,*/* |
Pokračujte v nasledujúcich testoch
1. Iba Accept:application/json je odoslaný a výsledok je vrátený json
2. Odosiela sa iba Accept:application/xml a výsledok vráti xml
3. Odoslať akceptovať: aplikáciu/xml a aplikáciu/json súčasne a výsledok vráti json
4. Odoslať accept:application/json a application/xml súčasne a výsledok vráti json
5. Upraviť prioritu a odoslať aplikáciu/xml súčasne. q=1.0,application/json; q=0,9 a výsledok vrátil xml
Z toho možno vyvodiť:
Typ návratových dát WebAPI je určený prijatím hlavičky požiadavky a predvoleným typom návratu je json 1. Ak neexistujú ani application/json, ani application/xml, vráťte json dáta 2. Keď je k dispozícii iba aplikácia/json, vráťte json dáta 3. Keď je k dispozícii iba application/xml, xml dáta sa vrátia 4. Keď je aplikácia/json a aplikácia/json súčasne, vrátený dátový typ je irelevantný pre ich poradie, ak majú rovnakú prioritu, vráti sa json, a ak je priorita odlišná, vráti sa typ s vyššou prioritou
| Prijať hlavu | Typ návratu | | application/json | json | | application/xml | xml | | application/xml,application/json | json | | application/json,application/xml | json | | aplikácia/xml; q=1.0,application/json; q=1.0 | json | | aplikácia/xml; q=0,9,application/json; q=0,9 | json | | aplikácia/xml; q=1.0,application/json; q=0,9 | xml | | aplikácia/xml; q=0,9,application/json; q=1.0 | json |
Ako je uvedené nižšie:
|