11

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

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

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

4

3 回答 3

11

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

接受:应用程序/json、应用程序/xml、文本/json、文本/xml

将偏好 JSON(如果可能)

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

接受:应用程序/json

应该做的伎俩

于 2012-08-10T00:08:16.277 回答
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 返回,这可能会很有用。

于 2012-08-10T00:09:44.193 回答
0

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

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

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

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

总而言之,以下是顺序。

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

  2. 如果*/*为标题给出,则将选择列表中Accept的第一项。config.Formatters

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

于 2020-08-26T14:01:14.550 回答