14

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

挫折很大,请帮我解决这个问题。

我对 ASP.NET Web API 很陌生,所以请多多包涵。

更新

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

4

3 回答 3

10

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

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

于 2012-10-16T15:24:52.123 回答
8

在 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();
}
于 2012-10-16T15:19:30.780 回答
5

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

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

W3c 明确指出——

14.1 接受

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

-和-

14.17 内容类型

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

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

于 2012-11-27T23:26:19.597 回答