我目前正在观看有关ASP.NET Web API的视频课程。调用控制器时,数据将通过默认以JSON格式返回。我只是想知道,因为当我从视频中复制这个示例项目时,我得到了XML。
沮丧很大,请帮我解决这个问题。
我是ASP.NET Web API的新手,所以请耐心等待。
更新
控制器不包含特殊代码。这是简单的代码,它是从带有空读/写操作模板的 API控制器生成的。
答案 0 :(得分:10)
ASP.NET WebAPI附带内置content negotitation因此返回值的格式由请求本身决定 - 更具体地说,由Accept
/ Content-Type
标头决定(取决于哪些存在,Accept
标题似乎比Content-type
更受青睐。
我假设您在浏览器中查看结果,默认情况下可能要求application/xml
。您需要在浏览器上玩一些设置/开发人员工具并强制它发送Content-Type: application/json
以获得正确的响应(假设您返回HttpResponseMessage)。
答案 1 :(得分:7)
:添加以下行:
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对于理解请求/响应协商非常有用。