Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 24777|Отговор: 3

[WebAPI] WebAPI персонализира формата на връщаните данни

[Копирай линк]
Публикувано в 30.11.2017 г. 11:00:16 ч. | | | |
Напоследък, когато се използва 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 означава неприемлива



Накрая, резултатите от теста:

браузерВръщане към форматирането  Заглавие за прием на заявка
т.е.jsontext/html, application/xhtml+xml, */*
Хромxmltext/html,application/xhtml+xml,application/xml; q=0.9,image/webp,image/apng,*/*; q=0.8
Firefoxxmltext/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/JSONjson
Приложение/XMLxml
application/xml, application/jsonjson
Application/JSON,application/xmljson
application/xml; q=1.0,application/json; q=1.0json
application/xml; q=0.9,application/json; q=0.9json
application/xml; q=1.0,application/json; q=0.9xml
application/xml; q=0.9,application/json; q=1.0json


Както е показано по-долу:





Предишен:python3 реализира хоризонтални таблици за разделяне с паралелен достъп
Следващ:.Net MVC прилага дългосрочни анкети
Публикувано в 30.11.2017 г. 11:06:08 ч. |
Удивително е, срещал съм тази ситуация преди, но не се чудех защо
 Хазяин| Публикувано в 30.11.2017 г. 11:07:36 ч. |
QWERTYU Публикувано на 2017-11-30 11:06
Удивително е, срещал съм тази ситуация преди, но не се чудех защо

Препоръчва се да се обезкуражава връщането на XML формат, тъй като в някои случаи връщането на JSON формат е нормално и връщането на XML формат хвърля изключение

Например, ако връщаната стойност е обектна, връщащият се JSON формат е нормален и върнатият XML формат ще докладва грешка
Публикувано в 25.04.2018 г. 8:50:44 ч. |
Лекцията е много подробна и има точки за знания, благодаря, събрани са
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com