Как установить сериализатор по умолчанию в ASP.NET Web API?
Сейчас я просматриваю видео-курс об ASP.NET Web API. Когда контроллер вызывается, данные возвращаются в JSON с помощью по умолчанию. Мне просто интересно, потому что, когда я копирую этот образец проекта из видео, я получаю XML.
Фрустрация большая, пожалуйста, помогите мне решить эту проблему.
Я новичок в ASP.NET Web API, поэтому, пожалуйста, несите меня.
UPDATE
Контроллер не содержит специального кода. Это простой код, который генерируется с помощью API-контроллера с пустым шаблоном чтения/записи.
Ответы
Ответ 1
ASP.NET WebAPI поставляется со встроенным контентом контента, поэтому формат возвращаемого значения определяется самим запросом - более конкретно с помощью Accept
/Заголовки Content-Type
(в зависимости от того, какие из них присутствуют, заголовок Accept
кажется предпочтительным для Content-Type
).
Я предполагаю, что вы просматриваете результаты в браузере и по умолчанию, возможно, запрашиваете application/xml
. Вам нужно будет поиграть с некоторыми настройками/инструментами разработчика в браузере и заставить его отправить Content-Type: application/json
, чтобы получить правильный ответ (при условии, что вы вернетесь HttpResponseMessage),
Ответ 2
в Global.asax: добавьте строку:
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
Это будет выглядеть так.
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
BundleTable.Bundles.RegisterTemplateBundles();
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
}
Ответ 3
Джеймс близок, но согласование содержимого фактически использует заголовок [Accept],
not [Content-Type]
Как и почти все остальное в MVC, вы можете переопределить компоненты согласования контента, чтобы обеспечить возврат содержимого желания
W3c четко заявляет -
14.1 Принять
Поле заголовка запроса принятия можно использовать для указания определенных типов носителей, приемлемых для ответа.
-and-
14.17 Content-Type
Поле заголовка объекта-типа Content-Type указывает тип носителя тела объекта, отправленного получателю, или, в случае метода HEAD, тип носителя, который был отправлен, имел бы запрос GET.
Эта страница заголовки очень полезна для понимания согласования запроса/ответа.