Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 24777|Atsakyti: 3

[WebAPI] WebAPI tinkina grąžinamų duomenų formatą

[Kopijuoti nuorodą]
Paskelbta 2017-11-30 11:00:16 | | | |
Neseniai, kai naudojate WebAPI, naršyklė pasiekia WebAPI, o numatytasis yra XML formatas, manau, kad šis grąžintas duomenų formatas turėtų būti pritaikomas vartotojui, leidžiantis serveriui grąžinti XML formatą arba JSON formatą, o ne serverio kodą konfigūruoti!



Nors serverio kodą galima sukonfigūruoti, nemanau, kad tai buvo pirminis WebAPI ketinimas.

1. Kokio tipo duomenis WebAPI grąžina pagal numatytuosius nustatymus, json ar xml?
2. Kaip pakeisti WebAPI grąžinamųjų duomenų tipą
Aš naudoju IE naršyklę, kad prašyčiau, kad grąžinami duomenys būtų JSON formatu, o "Firefox" ir "Chrome" grąžintas duomenų formatas yra XML, o tada naudoju "HttpWebRequest", kad paprašyčiau, kad grąžinimas būtų JSON formatas, man įdomu, kodėl ta pati programa, tas pats konfigūracijos failas, kodėl išvesties duomenų formatas skiriasi, net jei numatytasis išvesties JSON arba XML formatas gali būti suprantamas, kodėl yra skirtingos naršyklės, išvesties formatas skiriasi, Po tam tikrų tyrimų, aš pagaliau išsiaiškinau priežastį

Po bandymų buvo nustatyta, kad duomenys, grąžinti naudojant IE naršyklę, yra json, o naudojant Firefox ir Chrome yra xml, ir nustatyta, kad IE trūksta "application/xml" tipo, palyginti su Firefox ir Chrome, kai atsiranda http užklausos. Taigi numatytasis yra json formato duomenys, o "Firefox" ir "Chrome" siunčia priimtinus xml tipus, todėl grąžinami xml duomenys, o toliau pateikiama IE, Firefox ir Chrome užklausos antraštė


Priimti rodoma tik užklausose

Ką tai reiškia: naršyklės pusėje priimtinas laikmenos tipas


Pavyzdžiui, Sutinku: tekstas/html reiškia, kad naršyklė gali priimti atgalinio pranešimo tipą iš serverio kaip tekstą/html, kuris paprastai vadinamas html dokumentais

Jei serveris negali grąžinti text/html tipo duomenų, serveris turėtų pateikti 406 klaidą (nepriimtina)

Pakaitos simbolis * reiškia bet kokį tipą

Pavyzdžiui, Sutinku: */* reiškia, kad naršyklė gali apdoroti visus tipus (paprastai naršyklė siunčia tai į serverį)

Pavyzdžiui, Accept: text/* reiškia, kad visi teksto poklasiai yra priimtini

Priimti gali palaikyti kelių tipų atskyrimus

Pavyzdžiui, Sutinku: garsas/*; q=0.2, audio/basic reiškia, kad naršyklės teikia pirmenybę audio/basic medijos tipams, bet jei jie neturi šio tipo, galima naudoti ir kitus garso tipus

Čia pasirodo q=0.2, kuri yra reikšmė, nurodanti asociacijos laipsnį, o numatytoji reikšmė yra viena, išdėstyta nuo didžiausios iki mažiausios

Pavyzdžiui, Sutinku: tekstas / paprastas; q=0.5, tekstas/html, tekstas/x-dvi; q=0.8, tekstas/x-c

Priimtini tipo prioritetai yra šie

1) tekstas/html tekstas/x-c

2) tekstas / x-dvi

3) Tekstas / paprastas

q yra reikšmė tarp 0-1, numatytoji q reikšmė yra 1, o q=0 reiškia nepriimtina



Galiausiai testo rezultatai:

naršyklėGrįžti į formatavimą  Priimti užklausos antraštę
tyJSONtekstas/html, programa/xhtml+xml, */*
chromasxmltekstas/html,programa/xhtml+xml,programa/xml; q=0.9,vaizdas/webp,vaizdas/apng,*/*; q = 0,8
"Firefox"xmltekstas/html,programa/xhtml+xml,programa/xml; q=0,9,*/*; q=0,8,*/*



Tęskite šiuos bandymus

1. Tik priimti: išsiunčiama paraiška/json, o rezultatas grąžinamas json

2. Siunčiamas tik accept:application/xml ir rezultatas grąžina xml

3. Siųskite accept: application/xml ir application/json tuo pačiu metu, o rezultatas grąžins json

4. Siųskite accept:application/json ir application/xml tuo pačiu metu, o rezultatas grąžins json

5. Pakeiskite prioritetą ir tuo pačiu metu siųskite paraišką/xml. q=1.0,taikymas/json; q=0,9, o rezultatas grąžino xml

Iš to galima daryti išvadą:

WebAPI grąžinamų duomenų tipas nustatomas pagal užklausos antraštės priėmimą, o numatytasis grąžinimo tipas yra json
1. Jei nėra nei programos/json, nei programos/xml, grąžinkite json duomenis
2. Kai pasiekiama tik programa / json, grąžinkite json duomenis
3. Kai yra tik programa/xml, grąžinami xml duomenys
4. Kai tuo pačiu metu yra application/json ir application/json, grąžinamas duomenų tipas neturi reikšmės abiejų tvarkai, jei abu turi tą patį prioritetą, json grąžinamas, o jei prioritetas skiriasi, grąžinamas tipas su didesniu prioritetu



Priimti galvąGrąžinimo tipas
Programa/JSONJSON
Taikymas / XMLxml
Programa/xml,Programa/JSONJSON
Taikymas / JSON, Taikymas / XMLJSON
paraiška / xml; q=1.0,taikymas/json; q=1.0JSON
paraiška / xml; q=0.9,taikymas/json; q = 0,9JSON
paraiška / xml; q=1.0,taikymas/json; q = 0,9xml
paraiška / xml; q=0.9,taikymas/json; q=1.0JSON


Kaip parodyta žemiau:





Ankstesnis:Python3 įdiegia lygiagrečios prieigos horizontalias skaidymų lenteles
Kitą:.Net MVC įgyvendina ilgą apklausą
Paskelbta 2017-11-30 11:06:08 |
Tai nuostabu, aš radau šią situaciją anksčiau, bet aš negalvojau, kodėl
 Savininkas| Paskelbta 2017-11-30 11:07:36 |
QWERTYU Publikuota: 2017-11-30 11:06
Tai nuostabu, aš radau šią situaciją anksčiau, bet aš negalvojau, kodėl

Rekomenduojama neskatinti grąžinti XML formato, nes kai kuriais atvejais JSON formato grąžinimas yra normalus, o XML formato grąžinimas yra išimtis

Pavyzdžiui, jei grąžinama reikšmė yra objektas, grąžinamas JSON formatas yra normalus, o grąžintas XML formatas praneš apie klaidą
Paskelbta 2018-04-25 08:50:44 |
Paskaita yra labai išsami, ir yra žinių taškų, ačiū, ji buvo surinkta
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com