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

Mic*_*ing 14 asp.net-web-api

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

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

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

UPDATE

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

Jam*_*mes 10

ASP.NET WebAPI带有内置的内容协商,因此返回值的格式由请求本身决定 - 更具体地说是由Accept/ Content-Typeheaders决定的(取决于哪些存在,Accept标题似乎比它更受欢迎Content-type).

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


Ada*_*dam 8

在Global.asax中:添加行:

GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
Run Code Online (Sandbox Code Playgroud)

它看起来像这样.

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);

    BundleTable.Bundles.RegisterTemplateBundles();
    GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
}
Run Code Online (Sandbox Code Playgroud)


bra*_*arb 5

James接近了,但是内容协商实际上使用的是[Accept]标头,而不是[Content-Type]

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

W3c明确指出-

14.1接受

接受请求标头字段可用于指定响应可接受的某些媒体类型。

-和-

14.17内容类型

Content-Type实体标头字段指示发送给接收者的实体主体的媒体类型,或者在HEAD方法的情况下,如果请求是GET,则将被发送的媒体类型。

该页面标题对于理解请求/响应协商非常有用。