Recent, când folosesc WebAPI, browserul accesează WebAPI, iar implicit este formatul XML; cred că acest format de date returnat ar trebui să fie personalizabil de către utilizator, permițând serverului să returneze formatul XML sau JSON, în loc să configureze codul serverului!
Deși codul serverului poate fi configurat, nu cred că aceasta a fost intenția inițială a WebAPI.
1. Ce tip de date returnează WebAPI implicit, json sau xml? 2. Cum să modifici tipul de date de retur al WebAPI Folosesc browserul IE pentru a cere ca datele returnate să fie în format JSON, iar formatul de date returnat de Firefox și Chrome este XML, apoi folosesc HttpWebRequest pentru a cere ca returnarea să fie în format JSON, m-am întrebat de ce același program, același fișier de configurare, de ce formatul de date de ieșire este diferit, chiar dacă implicit este json sau xml de ieșire poate fi înțeles, de ce există browsere diferite, formatul de ieșire este diferit, După ceva cercetări, în sfârșit am descoperit motivul
După testare, s-a constatat că datele returnate prin browserul IE sunt json, în timp ce Firefox și Chrome sunt xml, iar IE nu are tipul "application/xml" comparativ cu Firefox și Chrome atunci când apar cereri http. Deci implicit este formatul json data, în timp ce Firefox și Chrome trimit tipuri XML acceptabile, astfel încât datele xml sunt returnate, iar următoarele sunt antetul cererii pentru IE, Firefox și Chrome
Acceptarea apare doar în Solicitări
Ce înseamnă: Tipul de media acceptabilă pe partea browserului
De exemplu, Accept: text/html înseamnă că browserul poate accepta tipul de postback de la server ca text/html, ceea ce este denumit în mod obișnuit documente html
Dacă serverul nu poate returna date de tip text/html, ar trebui să returneze o eroare 406 (inacceptabil)
Wildcard * reprezintă orice tip
De exemplu, Accept: */* înseamnă că browserul poate gestiona toate tipurile (în general, browserul trimite acest lucru către server)
De exemplu, Accept: text/* înseamnă că toate subclasele de text sunt acceptabile
Accept poate suporta mai multe tipuri de separări
De exemplu, Accept: audio/*; Q=0.2, audio/basic înseamnă că browserele preferă tipurile audio/basic media, dar dacă nu au acest tip, pot fi folosite și alte tipuri audio
Aici apare un q=0,2, care reprezintă gradul de asociere, iar valoarea implicită este unu, aranjat de la cel mai mare la cel mai mic
De exemplu, Accept: text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c
Prioritățile de tip acceptabile sunt următoarele
1) text/text html/x-c
2) text/x-dvi
3) text/simplu
q este o valoare între 0-1, valoarea implicită a lui q este 1, iar q=0 înseamnă inacceptabil
În final, rezultatele testului:
| browser | Întoarcerea la formatare | Antet Accept Request | | adică | json | text/html, aplicație/xhtml+xml, */* | | Chrome | 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,*/* |
Continuați cu următoarele teste
1. Se trimite doar accept:application/json, iar rezultatul este returnat json
2. Se trimite doar accept:application/xml, iar rezultatul returnează xml
3. Trimite accept: application/xml și application/json în același timp, iar rezultatul returnează json
4. Trimite accept:application/json și application/xml în același timp, iar rezultatul returnează json
5. Modifică prioritatea și trimite application/xml în același timp. q=1.0,application/json; q=0.9, iar rezultatul returna xml
Din aceasta se poate concluziona:
Tipul de date de returnare al WebAPI este determinat de acceptarea antetului de cerere, iar tipul implicit de returnare este json 1. Dacă nici application/json, nici application/xml nu există, returnați datele json 2. Când este disponibil doar aplicație/json, returnați datele json 3. Când sunt disponibile doar aplicații/xml, datele xml sunt returnate 4. Când există aplicații/json și aplicație/json în același timp, tipul de date returnat este irelevant pentru ordinea celor două, dacă cele două au aceeași prioritate, json este returnat, iar dacă prioritatea este diferită, tipul cu prioritate mai mare este returnat
| Acceptă capul | Tip de retur | | 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 |
Așa cum se arată mai jos:
|