Различия в согласовании содержимого между коллекциями и отдельными значениями в MVC 4? - PullRequest
2 голосов
/ 13 марта 2012

Я использую новый MVC4 ApiController для построения интерфейса поиска; как то так:

public IEnumerable<RecordSummaryType> Get( ... )
{
    var list = MyService.GiveMeTheList( ... );
    return list;
}

public SingleRecordDetailType Get(long id)
{
    var result = MyService.GiveMeASingleValue(id);
    return result;
}

По какой-то причине в этом случае вызов IEnumerable учитывает согласование содержимого - то есть, когда я передаю application / xml в заголовках запроса приема, он возвращает XML, а когда я передаю application / json, он возвращает JSON - , но Вызов SingleRecordType возвращает только JSON, даже если вы запрашиваете XML.

Так что мой вопрос - есть ли различия в том, как MVC 4 обрабатывает коллекции для отдельных типов значений? Или, более вероятно, есть ли в MVC хуки, где можно случайно отключить согласование содержимого для определенные звонки?

1 Ответ

3 голосов
/ 13 марта 2012

Это зависит от того, может ли SingleRecordDetailType быть сериализован XmlSerializer.XmlSerializer является форматером XML по умолчанию в ASP.NET Web API, чтобы узнать больше о его ограничениях, прочитайте здесь .

Если Web API не может сериализовать ответ с запрошенным форматером, который он будет использоватьпервый форматер в списке, который способен сериализовать ответ (в большинстве случаев это форматер JSON).

В качестве решения вы можете изменить класс yoru, чтобы он был сериализуем для XmlSerializer, или перенастроить форматер XML для использования данных.сериализатор контракта, установив для свойства UseDataContractSerialzier значение true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...