asp.net-web-api
ASP.NET Web API MediaTypeFormatter
Поиск…
MediaTypeFormatter Основная информация
MediaTypeFormatter - абстрактный класс, из которого XmlMediaTypeFormatter классы JsonMediaTypeFormatter и XmlMediaTypeFormatter . Здесь класс JsonMediaTypeFormatter обрабатывает объекты JSON, а класс XmlMediaTypeFormatter обрабатывает объекты XML.
Возвращает только JSON независимо от значения Accept Header:
Для того, чтобы возвращать только объекты JSON в ответ погоды запроса Accept значение заголовка запроса , если application/json или application/xml написать следующую строку в Register метода WebApiConfig класса.
config.Formatters.Remove(config.Formatters.XmlFormatter);
Здесь config является объектом класса HttpConfiguration . Эта строка кода полностью удаляет XmlFormatter который заставляет ASP.NET Web API всегда возвращать JSON независимо от значения заголовка Accept в запросе клиента. Используйте этот метод, если хотите, чтобы ваш сервис поддерживал только JSON, а не XML.
Возвращать только XML независимо от значения Accept Header:
Для того, чтобы возвращать только объекты XML в ответ погоды запроса Accept значение заголовка запроса , если application/json или application/xml написать следующую строку в Register метода WebApiConfig класса.
config.Formatters.Remove(config.Formatters.JsonFormatter);
Здесь config является объектом класса HttpConfiguration как описано выше. Эта строка кода полностью удаляет JsonFormatter который заставляет ASP.NET Web API всегда возвращать XML независимо от значения заголовка Accept в запросе клиента. Используйте этот метод, если хотите, чтобы ваш сервис поддерживал только XML, а не JSON.
Верните JSON вместо XML:
- Когда запрос выдается из браузера, служба веб-API должна возвращать JSON вместо XML.
- Когда запрос выдается с помощью инструмента, такого как скрипач, следует учитывать значение заголовка Accept. Это означает, что если заголовок Accept установлен в application / xml, служба должна вернуть XML, и если она установлена в application / json, служба должна вернуть JSON.
Способ 1:
Включите следующую строку в Register метода WebApiConfig класса.
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
Это предписывает веб-API ASP.NET использовать JsonFormatter когда запрос сделан для text/html который по умолчанию используется для большинства браузеров. Проблема с этим подходом заключается в том, что заголовок Content-Type ответа установлен в text/html который вводит в заблуждение.
Способ 2:
Используйте пользовательские форматирования. Сделать класс , который является производным от JsonMediaTypeFormatter класса и реализовать SetDefaultContentHeaders метод.
Ниже приведен пример пользовательского класса форматирования JSON, который возвращает формат JSON в ответ.
public class CustomJsonFormatter : JsonMediaTypeFormatter
{
public CustomJsonFormatter()
{
this.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
}
public override void SetDefaultContentHeaders(Type type, HttpContentHeaders headers, MediaTypeHeaderValue mediaType)
{
base.SetDefaultContentHeaders(type, headers, mediaType);
headers.ContentType = new MediaTypeHeaderValue("application/json");
}
}
И это пример форматирования типа Custom Media, который возвращает CSV-формат в ответ.
public class CSVMediaTypeFormatter : MediaTypeFormatter {
public CSVMediaTypeFormatter()
{
SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/csv"));
}
public CSVMediaTypeFormatter(MediaTypeMapping mediaTypeMapping) : this()
{
MediaTypeMappings.Add(mediaTypeMapping);
}
public CSVMediaTypeFormatter(IEnumerable<MediaTypeMapping> mediaTypeMappings) : this()
{
foreach (var mediaTypeMapping in mediaTypeMappings)
{
MediaTypeMappings.Add(mediaTypeMapping);
}
}
}
После того, как , класс реализации обычай форматировщик зарегистрировать его в Register метода WebApiConfig класса.
config.Formatters.Add(new CustomJsonFormatter());
Теперь, согласно вашему форматированию, вы получите ответ и Content-Type с сервера.