Nyligen, när jag använder WebAPI, använder webbläsaren WebAPI, och standarden är XML-format, jag tycker att detta returnerade dataformat bör anpassas av användaren, så att servern kan returnera XML- eller JSON-format istället för serverkod att konfigurera!
Även om serverkoden kan konfigureras tror jag inte att det var WebAPI:s ursprungliga avsikt.
1. Vilken datatyp returnerar WebAPI som standard, json eller xml? 2. Hur man modifierar returdatatypen för WebAPI Jag använder IE-webbläsaren för att begära att den returnerade datan är i JSON-format, och dataformatet som returneras av Firefox och Chrome är XML, och sedan använder jag HttpWebRequest för att begära att returen är JSON-format, jag undrade, varför är samma program, samma konfigurationsfil, varför är utdataformatet annorlunda, även om din standardutdata-json eller xml kan förstås, varför finns det olika webbläsare, utdataformatet är annorlunda, Efter lite research lyckades jag till slut lista ut orsaken
Efter tester upptäcktes att datan som returneras av IE-webbläsaren är json, medan Firefox och Chrome är xml, och det visar sig att IE saknar typen "application/xml" jämfört med Firefox och Chrome när HTTP-förfrågningar inträffar. Så standarden är json-formatdata, medan Firefox och Chrome skickar acceptabla xml-typer, så xml-data returneras, och följande är begäransökudornas huvud för IE, Firefox och Chrome
Acceptera förekommer endast i Förfrågningar
Vad det betyder: Den typ av media som är acceptabel på webbläsarsidan
Till exempel innebär Accept: text/html att webbläsaren kan acceptera typen av postback från servern som text/html, vilket ofta kallas html-dokument
Om servern inte kan returnera data av typen text/html bör servern returnera ett 406-fel (ej acceptabelt)
Wildcard * representerar vilken typ som helst
Till exempel betyder Accepta: */* att webbläsaren kan hantera alla typer (vanligtvis skickar webbläsaren detta till servern)
Till exempel betyder Accepta: text/* att alla underklasser av text är acceptabla
Acceptera kan stödja flera typer av separationer
Till exempel, Acceptera: ljud/*; q=0.2, audio/basic innebär att webbläsare föredrar audio/basic-medietyper, men om de inte har denna typ kan även andra ljudtyper användas
Här visas en q=0,2, vilket är ett värde som representerar graden av association, och standardvärdet är ett, ordnat från störst till minsta
Till exempel, Acceptera: text/klar; q=0,5, text/html, text/x-dvi; q=0,8, text/x-c
De acceptabla typprioriteringarna är följande
1) text/html text/x-c
2) Text/X-DVI
3) text/ren text
q är ett värde mellan 0-1, standardvärdet för q är 1, och q=0 betyder icke-acceptabelt
Slutligen, testresultaten:
| webbläsare | Återgång till formateringen | Acceptera förfrågan-header | | dvs | JSON | Text/HTML, Applikation/XHTML+XML, */* | | Krom | XML | text/html,application/xhtml+xml,application/xml; q=0.9,bild/webp,bild/apng,*/*; q=0,8 | | Firefox | XML | text/html,application/xhtml+xml,application/xml; q=0,9,*/*; q=0.8,*/* |
Fortsätt med följande tester
1. Endast accept:application/json skickas, och resultatet returneras json
2. Endast accept:application/xml skickas, och resultatet returnerar xml
3. Skicka accepta: application/xml och application/json samtidigt, och resultatet returnerar json
4. Skicka accept:application/json och application/xml samtidigt, och resultatet returnerar json
5. Ändra prioriteten och skicka applikation/xml samtidigt. q=1.0,application/json; q=0,9, och resultatet returnerade xml
Av detta kan man dra slutsatsen:
Return data-typen för WebAPI bestäms av acceptansen av request-headern, och standardtypen är json 1. Om varken application/json eller application/xml existerar, returnera json-datan 2. När endast applikation/json är tillgänglig, returnera json-datan 3. När endast applikation/xml är tillgänglig, returneras xml-data 4. När det finns application/json och application/json samtidigt är den returnerade datatypen irrelevant för ordningen av de två; om de två har samma prioritet returneras json, och om prioriteten är annorlunda returneras typen med högre prioritet
| Acceptera huvud | Returtyp | | Applikation/JSON | JSON | | Applikation/XML | XML | | application/xml,application/json | JSON | | application/json,application/xml | JSON | | applikation/xml; q=1.0,application/json; q=1,0 | JSON | | applikation/xml; q=0.9,application/json; q=0,9 | JSON | | applikation/xml; q=1.0,application/json; q=0,9 | XML | | applikation/xml; q=0.9,application/json; q=1,0 | JSON |
Som visas nedan:
|