我目前正在观看有关 ASP.NET Web API 的视频课程。当一个控制器被调用时,数据默认以 JSON 格式返回。我只是想知道,因为当我从视频中复制这个示例项目时,我得到了 XML。
挫折很大,请帮我解决这个问题。
我对 ASP.NET Web API 很陌生,所以请多多包涵。
更新
控制器不包含特殊代码。这是简单的代码,它是从API 控制器生成的,带有空的读/写操作模板。
我目前正在观看有关 ASP.NET Web API 的视频课程。当一个控制器被调用时,数据默认以 JSON 格式返回。我只是想知道,因为当我从视频中复制这个示例项目时,我得到了 XML。
挫折很大,请帮我解决这个问题。
我对 ASP.NET Web API 很陌生,所以请多多包涵。
更新
控制器不包含特殊代码。这是简单的代码,它是从API 控制器生成的,带有空的读/写操作模板。
ASP.NET WebAPI 带有内置的内容协商,因此返回值的格式由请求本身决定 - 更具体地说是由Accept
/Content-Type
标头(取决于存在的标头,Accept
标头似乎比Content-type
.
我假设您正在浏览器中查看结果,默认情况下它可能要求application/xml
. 您将需要在浏览器上使用一些设置/开发工具并强制它发送Content-Type: application/json
以获得正确的响应(假设您返回HttpResponseMessage)。
在 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();
}
James 很接近,但内容协商实际上使用的是 [Accept] 标头,而不是 [Content-Type]
与 MVC 中的几乎所有其他内容一样,您可以覆盖内容协商组件以确保返回所需的内容
W3c 明确指出——
14.1 接受
Accept request-header 字段可用于指定响应可接受的某些媒体类型。
-和-
14.17 内容类型
Content-Type entity-header 字段指示发送给接收者的实体主体的媒体类型,或者在 HEAD 方法的情况下,如果请求是 GET,则将发送的媒体类型。
此页眉对于理解请求/响应协商非常有用。