2015-03-04 4 views
0

Мой простой метод действий ниже всегда возвращает JSON, независимо от того, имеет ли заголовок Accept значение application/xml. Консолидация контента отлично работает при других действиях, которые у меня есть на этом же контроллере.Web API 2.2 всегда возвращает содержимое JSON

public HttpResponseMessage GetOrder(int id) { 
    var orderDescription = mydbc.tbl_job_versions.AsNoTracking().Where(t => t.JobId == id) 
     .Select(t => new{Id = t.JobId, Description = t.Brand + " " + t.Variety + " " + t.Promotion + " " + t.MarketSegment }).FirstOrDefault(); 

    if (orderDescription == null) { 
     return new HttpResponseMessage(HttpStatusCode.NotFound); 
    } 
    else { 
     return Request.CreateResponse((HttpStatusCode)200, orderDescription); 
    } 
} 

Что может заставлять это не выполнять согласование содержимого и вместо этого всегда возвращать JSON?

ответ

0

Обнаружено, что согласование содержимого WEB-API не может обрабатывать сериализацию анонимных типов в XML, только JSON. Если я создам класс, заполнить его из данных LINQ и вернуть его, я получаю XML при запросе XML.

Глядя вокруг некоторых я нашел вопрос о Codeplex http://aspnetwebstack.codeplex.com/workitem/2123

0

Вы можете проверить мой ответ здесь: https://stackoverflow.com/a/22918118/1184056

кажется XML форматировщик не может сказать, что он может написать объект, который вы даете ему, и поэтому вы не видите ответ в формате JSON.

+0

Аналогичная проблема в том, что XML сериализатором молча терпит неудачу, который я думаю, что это просто неправильно. – Mikee

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