V poslední době, když používám WebAPI, prohlížeč přistupuje k WebAPI a výchozí je XML formát, myslím, že tento vrácený datový formát by měl být uživatelem přizpůsobitelný, aby server mohl vracet XML nebo JSON formát, místo serverového kódu pro konfiguraci!
Ačkoliv lze serverový kód nastavit, nemyslím si, že to byl původní záměr WebAPI.
1. Jaký typ dat WebAPI vrací ve výchozím nastavení, json nebo xml? 2. Jak upravit typ návratových dat WebAPI Používám IE prohlížeč k požadavku, aby vrácená data byla ve formátu JSON, a formát dat vrácený Firefoxem a Chromem je XML, a pak používám HttpWebRequest k požadavku, že návrat je ve formátu JSON, přemýšlel jsem, proč je stejný program, stejný konfigurační soubor, proč je formát výstupních dat odlišný, i když je výchozí výstupní json nebo xml pochopitelný, proč jsou různé prohlížeče, výstupní formát je jiný, Po nějakém pátrání jsem konečně přišel na důvod
Po testování bylo zjištěno, že data vrácená pomocí prohlížeče IE jsou json, zatímco Firefox a Chrome jsou xml, a zjistilo se, že IE postrádá typ "application/xml" ve srovnání s Firefoxem a Chromem, když dochází k http požadavkům. Výchozí je tedy data ve formátu json, zatímco Firefox a Chrome posílají přijatelné typy xml, takže se vracejí xml data, a následuje záhlaví požadavku IE, Firefoxu a Chrome
Přijmout se objevuje pouze v Žádostech
Co to znamená: Typ médií, který je přijatelný na straně prohlížeče
Například Accept: text/html znamená, že prohlížeč může přijmout typ zpětného příspěvku ze serveru jako text/html, což se běžně označuje jako html dokumenty
Pokud server nemůže vrátit data typu text/html, měl by vrátit chybu 406 (nepřijatelné)
Žolík * představuje jakýkoli typ
Například Přijmout: */* znamená, že prohlížeč zvládne všechny typy (obvykle prohlížeč toto odesílá serveru)
Například Accept: text/* znamená, že všechny podtřídy textu jsou přijatelné
Accept může podporovat více typů oddělení
Například Přijmout: audio/*; Q=0.2, audio/basic znamená, že prohlížeče preferují audio/základní mediální typy, ale pokud tento typ nemají, lze použít i jiné audio typy
Zde se objevuje q=0,2, což je hodnota reprezentující stupeň asociace, a výchozí hodnota je jedna, uspořádaná od největšího po nejmenší
Například Přijmout: text/plain; q=0,5, text/html, text/x-dvi; q=0,8, text/x-c
Přijatelné typy priorit jsou následující
1) text/html text/x-c
2) text/x-dvi
3) text/prostý
q je hodnota mezi 0-1, výchozí hodnota q je 1 a q=0 znamená nepřijatelné
Nakonec výsledky testu:
| prohlížeč | Návrat k formátování | Hlavička přijmout požadavek | | ie | 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,*/* |
Pokračujte v následujících testech
1. Pouze přijmi: application/json je odeslán a výsledek je vrácen json
2. Odesláno je pouze přijmout:application/xml a výsledek vrací xml
3. Odeslat přijmout: aplikaci/xml a aplikaci/json současně a výsledek vrátí json
4. Pošlete accept:application/json a application/xml současně a výsledek vrátí json
5. Upravit prioritu a zároveň odesílat aplikaci/xml. q=1.0,application/json; q=0,9 a výsledek vrátil xml
Z toho lze vyvodit:
Typ return dat WebAPI je určen přijetím hlavičky požadavku a výchozím typem return je json 1. Pokud neexistují ani application/json, ani application/xml, vraťte json data 2. Když je k dispozici pouze application/json, vraťte json data 3. Když je k dispozici pouze application/xml, jsou vrácena xml data 4. Pokud jsou současně aplikace/json a aplikace/json, vrácený datový typ je pro pořadí těchto dvou irelevantní; pokud mají oba stejnou prioritu, vrací se json, a pokud je priorita odlišná, vrací se typ s vyšší prioritou
| Přijmi hlavu | Typ návratu | | 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 |
Jak je uvedeno níže:
|