Onlangs, bij het gebruik van WebAPI, gebruikt de browser toegang tot WebAPI, en de standaard is XML-formaat; ik denk dat dit teruggegeven dataformaat door de gebruiker aanpasbaar moet zijn, zodat de server XML- of JSON-formaat kan teruggeven in plaats van servercode om te configureren!
Hoewel de servercode geconfigureerd kan worden, denk ik niet dat dit de oorspronkelijke bedoeling van WebAPI was.
1. Welk datatype geeft WebAPI standaard terug, json of xml? 2. Hoe het type retourdata van WebAPI aan te passen Ik gebruik IE Browser om te vragen dat de data die wordt teruggegeven in JSON-formaat is, en het dataformaat dat Firefox en Chrome teruggeven XML is, en dan gebruik ik HttpWebRequest om te vragen dat de return JSON-formaat is. Ik vroeg me af: waarom is hetzelfde programma, hetzelfde configuratiebestand, waarom is het outputdataformaat anders, zelfs als je standaard output-JSON of XML begrepen kan worden, waarom zijn er verschillende browsers, het outputformaat is anders. Na wat onderzoek heb ik uiteindelijk de reden gevonden
Na testen bleek dat de data die wordt teruggegeven door de IE-browser json is, terwijl Firefox en Chrome xml zijn, en het is vastgesteld dat IE het type "applicatie/xml" mist in vergelijking met Firefox en Chrome wanneer HTTP-verzoeken plaatsvinden. Dus de standaard is json-formaat data, terwijl Firefox en Chrome acceptabele xml-types sturen, dus xml-data wordt teruggegeven, en het volgende is de requestheader van IE, Firefox en Chrome
Accepteren verschijnt alleen in Verzoeken
Wat het betekent: Het type media dat acceptabel is aan de browserzijde
Bijvoorbeeld, Accept: text/html betekent dat de browser het type postback van de server als text/html kan accepteren, wat vaak wordt aangeduid als html-documenten
Als de server geen gegevens van het type text/html kan retourneren, zou de server een 406-foutmelding moeten geven (niet acceptabel).
Wildcard * vertegenwoordigt elk type
Bijvoorbeeld, Accepteren: */* betekent dat de browser alle typen kan verwerken (meestal stuurt de browser dit naar de server)
Bijvoorbeeld, Accepteren: text/* betekent dat alle subklassen van tekst acceptabel zijn
Accepteren kan meerdere soorten separaties ondersteunen
Bijvoorbeeld, Accepteren: audio/*; q=0.2, audio/basic betekent dat browsers audio/basic-mediatypes prefereren, maar als ze dit type niet hebben, kunnen ook andere audiotypen worden gebruikt
Hier verschijnt een q=0,2, wat een waarde is die de mate van associatie weergeeft, en de standaardwaarde is één, gerangschikt van grootste naar kleinste
Bijvoorbeeld, Accepteren: tekst/plain; q=0.5, tekst/html, tekst/x-dvi; q=0,8, text/x-c
De acceptabele typeprioriteiten zijn als volgt
1) tekst/html tekst/x-c
2) tekst/x-dvi
3) tekst/plain
q is een waarde tussen 0-1, de standaardwaarde van q is 1, en q=0 betekent niet-acceptabel
Tot slot de testresultaten:
| Browser | Terug naar de opmaak | Request accepteer header | | ie | JSON | Text/HTML, Applicatie/XHTML+XML, */* | | Chroom | XML | Text/HTML,Applicatie/XHTML+XML,Applicatie/XML; q=0.9,afbeelding/webp,afbeelding/apng,*/*; q=0,8 | | Firefox | XML | Text/HTML,Applicatie/XHTML+XML,Applicatie/XML; q=0,9,*/*; q=0,8,*/* |
Ga door met de volgende tests
1. Alleen accept:application/json wordt verzonden, en het resultaat wordt json teruggegeven
2. Alleen accept:application/xml wordt verzonden, en het resultaat levert xml terug
3. Stuur accepteert: application/xml en application/json tegelijk, en het resultaat geeft json terug
4. Stuur accept:application/json en application/xml tegelijk, en het resultaat geeft json terug
5. Pas de prioriteit aan en stuur applicatie/xml tegelijk. q=1.0,applicatie/json; q=0,9, en het resultaat leverde xml terug
Hieruit kan worden gevolgd:
Het retourdatatype van WebAPI wordt bepaald door het accepteren van de verzoekheader, en het standaard returntype is json 1. Als noch application/json noch application/xml bestaan, geef dan de json-data terug 2. Wanneer alleen applicatie/json beschikbaar is, geef je de json-gegevens terug 3. Wanneer alleen applicatie/xml beschikbaar is, wordt de xml-data teruggegeven 4. Wanneer er application/json en application/json tegelijk zijn, is het geretourneerde datatype irrelevant voor de volgorde van de twee; als de twee dezelfde prioriteit hebben, wordt json teruggegeven, en als de prioriteit verschillend is, wordt het type met hogere prioriteit teruggegeven
| Accepteer hoofd | Retourtype | | Applicatie/JSON | JSON | | Applicatie/XML | XML | | Application/XML,Application/JSON | JSON | | applicatie/json,applicatie/xml | JSON | | applicatie/XML; q=1.0,applicatie/json; q=1,0 | JSON | | applicatie/XML; q=0.9,application/json; q=0,9 | JSON | | applicatie/XML; q=1.0,applicatie/json; q=0,9 | XML | | applicatie/XML; q=0.9,application/json; q=1,0 | JSON |
Zoals hieronder getoond:
|