如何指定在 ASP.NET Web API 中是需要 JSON 还是 XML?

Posted

技术标签:

【中文标题】如何指定在 ASP.NET Web API 中是需要 JSON 还是 XML?【英文标题】:How do I specify if I want JSON or XML in ASP.NET Web API? 【发布时间】:2012-08-07 06:43:49 【问题描述】:

本周我编写了两个 ASP.NET Web API 应用程序,它们都包含一个简单的控制器;我已经对每一个进行了调整以使它们正常工作,包括异常等等,但就我所见,它们的配置几乎相同。

其中一个返回 JSON,另一个返回 XML。我希望他们都返回 JSON!

我已经寻找了一些可以控制这种行为的配置,但我并不高兴。控制 ASP.NET Web API 使用的序列化类型的设置在哪里?

【问题讨论】:

【参考方案1】:

它由调用客户端(例如浏览器或您的 .NET 客户端)在 Accept 标头中传递的内容定义:

接受:application/json、application/xml、text/json、text/xml

将偏好 JSON(如果可能)

所以返回 XML 的客户端需要将 Accept 标头设置为上述或简单

接受:应用程序/json

应该做的伎俩

【讨论】:

如果“接受:/”怎么办?哪一个会是首选? xml 还是 json ?任何指针都会很有帮助.. @SRIDHARAN 这将取决于服务器的默认行为 - 没有单一的答案。许多人会默认使用 xml,但这只是猜测。任何现代构建 API 都将默认为 JSON 请参考***.com/a/63599337/5349104【参考方案2】:

要将输出限制为仅一种格式化程序,请尝试此处的说明:

http://www.asp.net/web-api/overview/formats-and-model-binding/json-and-xml-serialization#removing_the_json_or_xml_formatter

在相关说明中,以下链接介绍了 ASP.NET Web API 如何根据发送给它的 HTTP 请求决定使用哪种输出格式,即它如何选择 JSON 而不是 XML:

http://www.asp.net/web-api/overview/formats-and-model-binding/content-negotiation

如果您仍希望同时支持这两种格式,但需要确保您自己的客户端代码始终收到 JSON 返回,这可能会很有用。

【讨论】:

【参考方案3】:

两个写得很好的答案。我将在这个答案中解释默认行为。

What will be the default behavior ? i.e if "Accept: */*"

来自official docs。 (完整阅读此文档以了解端到端)

如果仍然没有匹配,内容协商器只需选择第一个可以序列化类型的格式化程序。

总而言之,以下是顺序。

    应用程序查找 Accept 标头。如果接受头值包含特定格式,它将使用该格式化程序。

    如果*/*Accept 标头,那么config.Formatters 列表中的第一项将被选中。

加分项:如果您尚未编辑 config.Formatters ,则默认为 json 值。

【讨论】:

以上是关于如何指定在 ASP.NET Web API 中是需要 JSON 还是 XML?的主要内容,如果未能解决你的问题,请参考以下文章

如何使 ASP.NET Web API 正确响应 403 或 401?

在 ASP.NET Core Web API 的已注册 .NET 数据提供程序列表中找不到指定的不变名称“System.Data.sqlClient”

asp.net如何输出数据?

如何通过js跨域调用ASP.NET Web API (请问如何实现在javascript中通过http get的方式跨域调用ASP.NET Web API?)

如何创建 ASP.NET Web API 网址?

如何从 ASP.NET 核心 mvc 向 asp.net 核心中的 Web API 发出 PUT 请求?