8

我正在加强 MVC 4 的 Web API,我对默认格式有点困惑。我希望 API 数据采用 JSON 格式。但是,它以 XML 形式返回它。根据http://www.asp.net/web-api/videos/getting-started/your-first-web-api上的 MVC 4 入门视频,默认情况下应该是 JSON。但是当我创建一个新的 Web Api 项目并运行示例时,我得到了这个:

<ArrayOfstring><string>value1</string><string>value2</string></ArrayOfstring>

我一直在兜圈子,试图在 JSON 中得到这个,但显然有很多关于这个的错误信息。如:

  1. 如果我将“application/json”添加到内容类型标头,它应该返回 JSON。这不起作用,但我怀疑我没有正确的标题变量名称,因为我没有找到要使用的确切名称。我在请求标头中尝试了“Content-Type”和“contentType”,但没有成功。此外,我默认需要 JSON,而不是根据标题信息。
  2. 如果我创建一个 JsonFormatter 并将其添加到 Application_StartGlobalConfiguration.Configuration.Formatters.Insert(0, new JsonNetFormatter(serializerSettings));它应该可以解决问题。但是我收集了这个贬值的例子,因为没有一个例子有效。

我可以做什么,最好是简单的,默认以 JSON 格式输出数据?

4

6 回答 6

19

将此添加到 GLOBAL.ASAX 以获取application/json的响应

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();
}

或者,如果您需要将 XML 保留为媒体类型,则可以改为编辑App_Start/WebApiConfig.cs

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

这使得 JSON 成为 Web 浏览器的默认响应,但返回text/html

资源

于 2012-10-15T22:46:03.573 回答
4

我希望 API 数据采用 JSON 格式。但是,它以 XML 形式返回

你是如何访问你的 webapi 的?您是否使用 Chrome 访问您的 webapi 服务(正如尼克在评论中提到的那样)?Chrome 将 Accept 标头 application/xml 添加到请求中...

如果我将“application/json”添加到内容类型标头,它应该返回 JSON

尝试设置“接受”标题。

如果我创建一个 JsonFormatter 并将其添加到 Application_Start GlobalConfiguration.Configuration.Formatters.Insert(0, new JsonNetFormatter(serializerSettings)); 它应该可以解决问题。但是我收集了这个贬值的例子,因为没有一个例子有效。

如果请求的接受头是 application/xml,内容协商仍然会选择 XmlMediaTypeFormatter 并返回 application/xml。还有一件事,JSON 的格式化程序称为 JsonMediaTypeFormatter,它已经在 Formatters 集合的位置 0 中。

于 2012-10-15T23:23:07.143 回答
0

Quoting Felipe Leusin (How do I get ASP.NET Web API to return JSON instead of XML using Chrome?)

I just add the following in App_Start/WebApiConfig.cs class in my MVC Web API project.

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

That makes sure you get json on most queries, but you can get xml when you send text/xml.

If you need to have the response Content-Type as application/json please check Todd's answer below: https://stackoverflow.com/a/20556625/287145

于 2015-02-17T22:39:23.767 回答
0

您无需删除 xml 支持即可获得 JSON 响应。对于 GET 请求,您应该设置 Accept-header - 而不是 Content-Type 标头。对于其他 HTTP 动词,这取决于。在这里充分解释。

http://blogs.msdn.com/b/kiranchalla/archive/2012/02/25/content-negotiation-in-asp-net-mvc4-web-api-beta-part-1.aspx

奖励:使用 Google Chrome 的 Postman 插件来测试 REST API。强烈推荐 :)

https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en

于 2013-01-25T12:00:43.547 回答
0

您也可以在下面写下 GLOBAL.ASAX

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));

这也适用于我。

于 2013-11-19T12:09:27.577 回答
0

如果您只想要 JSON,则清除其所有默认值的格式化程序集合,然后仅添加 JSON 一个。

于 2012-10-16T11:28:39.607 回答