0

После Darrel Miller's guide Я отправляю необработанные данные на свой веб-контроллер api и сохраняю его. Содержимое может быть application/xml или application/json.Web Api 2 Содержание Обсуждение не подчиняется Принять заголовок

В соответствующем методе получения я получаю опубликованный контент, анализируя XElement для содержимого XML или JToken для json и возвращаю OK (json) или OK (xml).

public IHttpActionResult Get() 
{ 
    // obtain parsed JToken or XElement 

    return OK(parsedObject); 
} 

Проблема заключается в том, что это не повинуется Accept заголовок, например, возвращающегося оригинальный JSON, когда Accept это «приложение/XML». Это по дизайну или я чего-то не хватает?

Я ожидаю this вид поведения.

Редактировать - заголовок Accept подчиняется, если я изменяю содержимое, переданное методу OK, на parsedObject.ToString(), поэтому, похоже, проблема заключается в преобразовании объекта JToken в XML.

ответ

1

Вы уверены, что не удалили XmlSerializer из своего списка форматирования?

В любом случае вы всегда можете управлять форматированием, который будет использоваться для сериализации на уровне ответа.

Например:

//forcing xml 
    HttpResponseMessage resp = Request.CreateResponse(HttpStatusCode.OK, result, new XmlMediaTypeFormatter()); 
    return resp; 

Вы можете изменить new XmlMediaTypeFormatter() с экземпляром текущего форматировщика для фактической конфигурации.

Проверьте связь this и ссылку this.

+0

Я не удалил его, GlobalConfiguration.Configuration.Formatters содержит System.Net.Http.Formatting.XmlMediaTypeFormatter. –

+1

Если объект не является готовым к использованию в качестве xml, система будет использовать форматтер по умолчанию. Я не могу здесь использовать xmlformatter или не способен распознать его как действительный xml. Вы пытались заставить его? –

+0

Вы правы, пытаясь вручную использовать JsonConvert. + 1, отметив, что система использует форматтер по умолчанию в качестве резервной копии. Не уверен, что мне это нравится. –

 Смежные вопросы

  • Нет связанных вопросов^_^