Ostatnio, korzystając z WebAPI, przeglądarka korzysta z WebAPI, a domyślnie jest to format XML. Myślę, że ten zwrócony format danych powinien być konfigurowalny przez użytkownika, pozwalając serwerowi zwracać format XML lub JSON, zamiast kodu serwera do konfiguracji!
Chociaż kod serwera można konfigurować, nie sądzę, żeby to był pierwotny zamysł WebAPI.
1. Jaki typ danych WebAPI zwraca domyślnie, json czy xml? 2. Jak zmodyfikować typ danych zwrotnych WebAPI Używam przeglądarki IE, aby poprosić, by dane zwracane były w formacie JSON, a format danych zwracany przez Firefox i Chrome to XML, a potem używam HttpWebRequest, aby poprosić, by zwrot był w formacie JSON. Zastanawiałem się, dlaczego ten sam program, ten sam plik konfiguracyjny, dlaczego format danych wyjściowych jest inny, nawet jeśli domyślnie wyjść json lub xml jest zrozumiałe, dlaczego są różne przeglądarki, a format wyjściowy jest inny. Po pewnych poszukiwaniach w końcu odkryłem powód
Po testach stwierdzono, że dane zwracane przez przeglądarkę IE to json, podczas gdy w Firefoxie i Chrome to xml, a IE nie ma typu "application/xml" w porównaniu do Firefoxa i Chrome podczas żądań http. Domyślnie dane w formacie json, podczas gdy Firefox i Chrome wysyłają akceptowalne typy xml, więc dane xml są zwracane, a następuje nagłówek żądania IE, Firefox i Chrome
Akceptuj pojawia się tylko w Requestach
Co to oznacza: Rodzaj mediów akceptowalnych po stronie przeglądarki
Na przykład Accept: text/html oznacza, że przeglądarka może zaakceptować typ postbacku z serwera jako tekst/html, co jest powszechnie określane jako dokumenty html
Jeśli serwer nie może zwrócić danych typu tekst/html, powinien zwrócić błąd 406 (nieakceptowalny)
Dzika karta * oznacza dowolny typ
Na przykład Accept: */* oznacza, że przeglądarka obsługuje wszystkie typy (zazwyczaj przeglądarka wysyła to do serwera)
Na przykład Accept: text/* oznacza, że wszystkie podklasy tekstu są akceptowalne
Accept może wspierać wiele typów separacji
Na przykład, Zaakceptuj: audio/*; q=0.2, audio/basic oznacza, że przeglądarki preferują typy audio/basic media, ale jeśli nie mają tego typu, można też używać innych typów audio
Tutaj pojawia się q=0,2, która jest wartością reprezentującą stopień powiązania, a domyślną wartością jest jeden, ułożona od największego do najmniejszego
Na przykład, Akceptuj: tekst/gładki; q=0,5, tekst/html, tekst/x-dvi; q=0,8, tekst/x-c
Akceptowalne priorytety typów są następujące
1) tekst/html tekst/x-c
2) tekst/x-dvi
3) tekst/gładka
q to wartość między 0 a 1, domyślna wartość q to 1, a q=0 oznacza nieakceptowalną
Na koniec wyniki testu:
| Przeglądarka | Powrót do formatowania | Nagłówek zaakceptuj żądanie | | ie | json | tekst/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,*/* |
Kontynuuj następujące testy
1. Wysyłane jest tylko akceptowanie: application/json, a wynik zwracany jest json
2. Wysyłane jest tylko Accept:application/xml, a wynik zwraca xml
3. Send accept: application/xml i application/json jednocześnie, a wynik zwraca json
4. Wyślij jednocześnie accept:application/json i application/xml, a wynik zwraca json
5. Zmodyfikuj priorytet i wysyłaj aplikację/xml jednocześnie. q=1.0,application/json; q=0.9, a wynik zwracał xml
Z tego można wywnioskować:
Typ danych return WebAPI jest określany przez akceptację nagłówka żądania, a domyślnym typem return jest json 1. Jeśli nie istnieje ani application/json, ani application/xml, zwróć dane json 2. Gdy dostępna jest tylko aplikacja/json, zwróć dane json 3. Gdy dostępne jest tylko application/xml, zwracane są dane xml 4. Gdy aplikacja/json i aplikacja/json występują jednocześnie, zwrócony typ danych nie ma znaczenia dla kolejności tych dwóch; jeśli oba mają ten sam priorytet, zwraca się json, a jeśli priorytet jest inny, zwracany jest typ o wyższym priorytecie
| Przyjmuj głowę | Typ zwrotu | | 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 pokazano poniżej:
|