Mostanában, amikor WebAPI-t használunk, a böngésző hozzáfér a WebAPI-hoz, és az alapértelmezett XML formátum, szerintem ezt a visszaküldött adatformátumot a felhasználó testreszabhatja, így a szerver XML vagy JSON formátumot adhat vissza, nem pedig szerverkódot konfigurálhatna!
Bár a szerver kódja konfigurálható, szerintem ez nem volt a WebAPI eredeti célja.
1. Milyen adattípust ad vissza a WebAPI alapértelmezettben, json vagy xml? 2. Hogyan módosítsuk a WebAPI visszaküldési adattípusát Az IE böngészőt használom, hogy kérjem, hogy a visszaküldött adatok JSON formátumban legyenek, és a Firefox és Chrome által visszaadott adatformátum XML, majd a HttpWebRequest-en kérem, hogy a visszaküldés JSON formátumban legyen, azon gondolkodtam, miért ugyanaz a program, ugyanaz a konfigurációs fájl, miért más, hogy a kimeneti adatformátum más, még ha az alapértelmezett kimeneted json vagy xml is érthető, miért vannak különböző böngészők, a kimeneti formátum más, Némi kutatás után végre rájöttem az okára
Tesztelés után kiderült, hogy az IE böngészővel visszaadott adatok json, míg a Firefox és Chrome xml, és kiderült, hogy az IE nem rendelkezik az "application/xml" típussal a Firefoxhoz és Chromehoz képest, amikor http kérések érkeznek. Tehát az alapértelmezett json formátumú adat, míg a Firefox és a Chrome elfogadható xml típusokat küld, így xml adatokat küldenek vissza, és az alábbi az IE, Firefox és Chrome kérés fejléce
Az elfogadás csak a Kérések között jelenik meg
Mit jelent: Milyen típusú média elfogadható a böngésző oldalon
Például az Accept: text/html azt jelenti, hogy a böngésző elfogadhatja a szerverről érkező postback típust szöveg/html formátumban, amit általában html dokumentumoknak neveznek
Ha a szerver nem tud szöveg/html típusú adatokat visszaadni, akkor a szervernek 406-os hibát kell adnia (nem elfogadható)
A vadkártya * bármilyen típust jelöl
Például az Accept: */* azt jelenti, hogy a böngésző képes kezelni az összes típust (általában a böngésző ezt a szervernek küldi)
Például az Accept: text/* azt jelenti, hogy minden szövegosztály elfogadható
Az Accept többféle szétválasztást is támogathat
Például: Accept: audio/*; q=0.2, audio/basic azt sugallja, hogy a böngészők az audio/basic médiatípusokat részesítik előnyben, de ha nincs ilyen típusuk, más hangtípusok is használhatók
Itt megjelenik egy q=0,2, amely az asszociáció fokát jelképezi, és az alapértelmezett érték egy, a legnagyobbtól a legkisebbőig rendezve
Például: Elfogadni: szöveg/egyszerű; q=0.5, szöveg/html, szöveg/x-dvi; q=0.8, text/x-c
Az elfogadható típusprioritások a következők
1) szöveg/html szöveg/x-c
2)text/x-dvi
3)szöveg/egyszerű
q egy 0-1 közötti érték, q alapértelmezett értéke 1, és q=0 azt jelenti, hogy nem elfogadható
Végül a teszteredmények:
| böngésző | Visszatérés a formázáshoz | Kérés fejlécének elfogadása | | azaz | json | text/html, application/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,*/* |
Folytassák a következő teszteket
1. Csak az accept:application/json küldés kerül, és az eredmény visszakerül json
2. Csak az accept:application/xml küldés történik, és az eredmény xml
3. Egyszerre küldjük az accept: application/xml és application/json fájlokat, és az eredmény json-t ad vissza
4. Egyszerre küldd az accept:application/json és application/xml fájlokat, és az eredmény json
5. Módosítsd a prioritást, és egyszerre küldd el az application/xml-t. q=1.0,application/json; q=0,9, és az eredmény xml lett
Ebből következtethető ki:
A WebAPI visszaküldési adattípusát a kérés fejlécének elfogadása határozza meg, és az alapértelmezett visszatérési típus json 1. Ha sem application/json, sem application/xml nem létezik, adja vissza a json adatot 2. Amikor csak application/json érhető el, küldd vissza a json adatokat 3. Amikor csak application/xml érhető el, az xml adatok visszakerülnek 4. Ha egyszerre van application/json és application/json, a visszaküldött adattípus nem releváns a kettő sorrendjében, ha a kettőnek ugyanaz az elsőbbsége, akkor a json visszatér, ha a prioritás eltérő, akkor a magasabb prioritású típus jelenik meg
| Elfogadd a fejet | Visszatérő típus | | 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 |
Ahogy az alábbiakban látható:
|