Поиск…


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:

  1. Когда запрос выдается из браузера, служба веб-API должна возвращать JSON вместо XML.
  2. Когда запрос выдается с помощью инструмента, такого как скрипач, следует учитывать значение заголовка 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 с сервера.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow