Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 24777|Antwoord: 3

[WebAPI] WebAPI past het retourdataformaat aan

[Link kopiëren]
Geplaatst op 30-11-2017 11:00:16 | | | |
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:

BrowserTerug naar de opmaak  Request accepteer header
ieJSONText/HTML, Applicatie/XHTML+XML, */*
ChroomXMLText/HTML,Applicatie/XHTML+XML,Applicatie/XML; q=0.9,afbeelding/webp,afbeelding/apng,*/*; q=0,8
FirefoxXMLText/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 hoofdRetourtype
Applicatie/JSONJSON
Applicatie/XMLXML
Application/XML,Application/JSONJSON
applicatie/json,applicatie/xmlJSON
applicatie/XML; q=1.0,applicatie/json; q=1,0JSON
applicatie/XML; q=0.9,application/json; q=0,9JSON
applicatie/XML; q=1.0,applicatie/json; q=0,9XML
applicatie/XML; q=0.9,application/json; q=1,0JSON


Zoals hieronder getoond:





Vorig:Python3 implementeert horizontale partitioneringstabellen met gelijktijdige toegang
Volgend:.Net MVC implementeert long polling
Geplaatst op 30-11-2017 11:06:08 |
Het is geweldig, ik heb deze situatie eerder meegemaakt, maar ik dacht niet na waarom
 Huisbaas| Geplaatst op 30-11-2017 11:07:36 |
QWERTYU Geplaatst op 30-11-2017 11:06
Het is geweldig, ik heb deze situatie eerder meegemaakt, maar ik dacht niet na waarom

Het wordt aanbevolen om het terugkeren van XML-formaat te ontmoedigen omdat het in sommige gevallen normaal is om JSON-formaat terug te keren en het terugkeren van XML-formaat een uitzondering opwerpt

Als bijvoorbeeld de returnwaarde object is, is het return JSON-formaat normaal, en het return XML-formaat zal een foutmelding geven
Geplaatst op 25-04-2018 08:50:44 |
De lezing is zeer gedetailleerd en er zijn kennispunten, dank je, het is verzameld
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com