Напоследък, когато се използва WebAPI, браузърът достъпва WebAPI, а по подразбиране е XML формат, мисля, че този върнат формат на данните трябва да бъде персонализиран от потребителя, позволявайки на сървъра да върне XML формат или JSON формат, вместо сървърен код за конфигуриране!
Въпреки че кодът на сървъра може да се конфигурира, не мисля, че това беше първоначалното намерение на WebAPI.
1. Какъв тип данни връща WebAPI по подразбиране, json или xml? 2. Как да се модифицира типът на връщане на данни в WebAPI Използвам IE browser, за да поискам връщаните данни да са в 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 означава, че браузърът може да приеме типа postback от сървъра като text/html, което обикновено се нарича html документи
Ако сървърът не може да върне данни от тип text/html, сървърът трябва да върне грешка 406 (неприемливо)
Уайлдкард * представлява всякакъв тип
Например, Accept: */* означава, че браузърът може да обработва всички типове (обикновено браузърът изпраща това към сървъра)
Например, Accept: text/* означава, че всички подкласове на текста са приемливи
Accept може да поддържа няколко типа разделяния
Например, Accept: audio/*; Q=0.2, Audio/BASIC означава, че браузърите предпочитат аудио/базови медийни типове, но ако нямат този тип, могат да се използват и други аудио типове
Тук се появява q=0.2, което е стойност, представляваща степента на асоциация, а по подразбиране стойността е едно, подредени от най-голямо към най-малко
Например, Приеми: текст/обикновено; 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. Модифицирайте приоритета и изпращайте приложение/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 | | Приложение/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 |
Както е показано по-долу:
|