使用更新的ASP。NET Web API,在Chrome中我看到XML -我如何将其更改为请求JSON,以便我可以在浏览器中查看它?我相信这只是请求头的一部分,我是正确的吗?


当前回答

我很惊讶地看到这么多的回复需要编码来更改一个API中的单个用例(GET),而不是使用一个必须安装一次并且可以用于任何API(自己或第三方)和所有用例的适当工具。

所以好的答案是:

如果你只想请求json或其他内容类型,请安装Requestly或类似的工具,并修改Accept报头。 如果你也想使用POST,并有很好的格式的json, xml等,使用适当的API测试扩展,如Postman或ARC。

其他回答

注意:阅读这个答案的注释,如果你使用WebAPI的默认错误处理,它可能会产生一个XSS漏洞

我只是在我的MVC Web API项目的App_Start / WebApiConfig.cs类中添加了以下内容。

config.Formatters.JsonFormatter.SupportedMediaTypes
    .Add(new MediaTypeHeaderValue("text/html") );

这确保您在大多数查询中得到JSON,但当您发送text/ XML时可以得到XML。

如果你需要将响应Content-Type设置为application/json,请检查Todd下面的回答。

命名空间正在使用System.Net.Http.Headers。

我很惊讶地看到这么多的回复需要编码来更改一个API中的单个用例(GET),而不是使用一个必须安装一次并且可以用于任何API(自己或第三方)和所有用例的适当工具。

所以好的答案是:

如果你只想请求json或其他内容类型,请安装Requestly或类似的工具,并修改Accept报头。 如果你也想使用POST,并有很好的格式的json, xml等,使用适当的API测试扩展,如Postman或ARC。

看看WebAPI中的内容协商。这些(第1部分和第2部分)非常详细和彻底的博客文章解释了它是如何工作的。

简而言之,您是对的,只需要设置Accept或Content-Type请求头。如果你的Action没有返回特定的格式,你可以设置Accept: application/json。

不要使用浏览器来测试API。

相反,尝试使用允许您指定请求的HTTP客户机,例如CURL,甚至Fiddler。

这个问题的问题在客户端,而不是API。web API根据浏览器的请求正确地工作。

使用RequestHeaderMapping工作得更好,因为它还在响应头中设置Content-Type = application/json,这允许Firefox(带有JSONView插件)将响应格式化为json。

GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings
.Add(new System.Net.Http.Formatting.RequestHeaderMapping("Accept", 
                              "text/html",
                              StringComparison.InvariantCultureIgnoreCase,
                              true, 
                              "application/json"));