Нещодавно, при використанні WebAPI, браузер звертається до WebAPI, і за замовчуванням є формат XML, я вважаю, що цей повернутий формат даних має бути налаштовуваним користувачем, дозволяючи серверу повертати формат XML або JSON, замість коду сервера для налаштування!
Хоча серверний код можна налаштувати, я не думаю, що це було початковим задумом WebAPI.
1. Який тип даних WebAPI повертає за замовчуванням — json чи xml? 2. Як змінити тип повернених даних WebAPI Я використовую браузер IE, щоб запитати, щоб повернені дані були у форматі JSON, а формат даних, повернений Firefox і Chrome, був XML, а потім використовую HttpWebRequest, щоб запитати, щоб повернення було у форматі JSON. Я замислився, чому одна й та сама програма, той самий конфігураційний файл, чому формат вихідних даних різний, навіть якщо за замовчуванням json або xml можна зрозуміти, чому існують різні браузери, а вихідний формат різний, Після деяких досліджень я нарешті зрозумів причину
Після тестування було встановлено, що дані, які повертаються через браузер IE, є json, тоді як Firefox і Chrome — xml, і виявилося, що IE не має типу «application/xml» у порівнянні з Firefox і Chrome при запитах на http. Отже, за замовчуванням дані у форматі json, тоді як Firefox і Chrome надсилають прийнятні xml-типи, тому xml-дані повертаються, і нижче наведено заголовок запиту IE, Firefox і Chrome
Прийняти з'являється лише у розділі Запити
Що це означає: тип медіа, який прийнятний на стороні браузера
Наприклад, Accept: text/html означає, що браузер може приймати тип постбеку з сервера як text/html, що зазвичай називають html-документами
Якщо сервер не може повернути дані типу text/html, сервер повинен повернути помилку 406 (неприйнятно)
Джокер-карта * позначає будь-який тип
Наприклад, Accept: */* означає, що браузер може обробляти всі типи (зазвичай браузер надсилає це серверу)
Наприклад, Accept: text/* означає, що всі підкласи тексту є прийнятними
Accept може підтримувати кілька типів розділень
Наприклад, Прийняти: audio/*; Q=0.2, Audio/BASIC означає, що браузери віддають перевагу аудіо/базовим типам медіа, але якщо такого типу немає, можна використовувати й інші типи аудіо
Тут з'являється q=0.2, що є значенням, що відображає ступінь асоціації, а за замовчуванням значення — один, розташоване від найбільшого до найменшого
Наприклад, Accept: text/plain; q=0.5, текст/html, текст/x-dvi; q=0,8, текст/x-c
Прийнятні пріоритети типу такі:
1) текстовий/html-текст/x-c
2)text/x-dvi
3) текст/простий
q — це значення від 0 до 1, значення q за замовчуванням — 1, а q=0 означає неприйнятне
Нарешті, результати тестів:
| Браузер | Повернення до форматування | Заголовок прийняти запит | | тобто | json | text/html, application/xhtml+xml, */* | | Хром | 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,*/* |
Продовжуйте наступні тести
1. Відправляється лише accept:application/json, і результат повертається як json
2. Надсилається лише accept:application/xml, а результат повертає xml
3. Надіслати accept: application/xml та application/json одночасно, і результат повертає json
4. Надіслати accept:application/json та application/xml одночасно, і результат повертає json
5. Змінити пріоритет і одночасно надіслати application/xml. q=1.0,application/json; q=0.9, і результат повертав XML
З цього можна зробити висновок:
Тип повернених даних WebAPI визначається прийняттям заголовка запиту, а тип повернення за замовчуванням — json 1. Якщо ні application/json, ні application/xml не існує, поверніть дані json 2. Коли доступні лише application/json, поверніть дані json 3. Коли доступний лише application/xml, дані XML повертаються 4. Коли одночасно є application/json і application/json, повернений тип даних не має значення для порядку цих двох, якщо вони мають однаковий пріоритет — повертається json, а якщо пріоритет різний — повертається тип з вищим пріоритетом
| Прийми голову | Тип повернення | | 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 |
Як показано нижче:
|