如何在ASP.NET Web API中设置默认序列化程序?

时间:2012-10-16 15:09:29

标签: asp.net-web-api

我目前正在观看有关ASP.NET Web API的视频课程。调用控制器时,数据将通过默认以JSON格式返回。我只是想知道,因为当我从视频中复制这个示例项目时,我得到了XML。

沮丧很大,请帮我解决这个问题。

我是ASP.NET Web API的新手,所以请耐心等待。

更新

控制器不包含特殊代码。这是简单的代码,它是从带有空读/写操作模板的 API控制器生成的。

3 个答案:

答案 0 :(得分:10)

ASP.NET WebAPI附带内置content negotitation因此返回值的格式由请求本身决定 - 更具体地说,由Accept / Content-Type标头决定(取决于哪些存在,Accept标题似乎比Content-type更受青睐。

我假设您在浏览器中查看结果,默认情况下可能要求application/xml。您需要在浏览器上玩一些设置/开发人员工具并强制它发送Content-Type: application/json以获得正确的响应(假设您返回HttpResponseMessage)。

答案 1 :(得分:7)

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();
}

答案 2 :(得分:4)

James很接近,但内容协商实际上使用[Accept]标头,  不是[内容类型]

与MVC中的几乎所有其他内容一样,您可以覆盖内容协商组件以确保返回所需内容

W3c明确指出 -

14.1接受

Accept request-header字段可用于指定响应可接受的某些媒体类型。

- 和 -

14.17内容类型

Content-Type entity-header字段指示发送给收件人的实体主体的媒体类型,或者在HEAD方法的情况下,指示请求为GET时发送的媒体类型。< / p>

此页面headers对于理解请求/响应协商非常有用。