本周我编写了两个 ASP.NET Web API 应用程序,它们都包含一个简单的控制器;我已经调整了每个以使它们工作,包括异常等等,但据我所见,它们的配置几乎相同。
其中一个返回 JSON,另一个返回 XML。我希望他们都返回 JSON!
我已经寻找了一些可以控制这种行为的配置,但我并不高兴。控制 ASP.NET Web API 使用的序列化类型的设置在哪里?
本周我编写了两个 ASP.NET Web API 应用程序,它们都包含一个简单的控制器;我已经调整了每个以使它们工作,包括异常等等,但据我所见,它们的配置几乎相同。
其中一个返回 JSON,另一个返回 XML。我希望他们都返回 JSON!
我已经寻找了一些可以控制这种行为的配置,但我并不高兴。控制 ASP.NET Web API 使用的序列化类型的设置在哪里?
它由调用客户端(例如浏览器或您的 .NET 客户端)在 Accept 标头中传递的内容定义:
接受:应用程序/json、应用程序/xml、文本/json、文本/xml
将偏好 JSON(如果可能)
因此,返回 XML 的客户端需要将Accept
标头设置为上述或简单
接受:应用程序/json
应该做的伎俩
要将输出限制为仅一种格式化程序,请尝试此处的说明:
在相关说明中,以下链接介绍了 ASP.NET Web API 如何根据发送给它的 HTTP 请求决定使用哪种输出格式,即它如何选择 JSON 而不是 XML:
http://www.asp.net/web-api/overview/formats-and-model-binding/content-negotiation
如果您仍希望同时支持这两种格式,但需要确保您自己的客户端代码始终收到 JSON 返回,这可能会很有用。
两个写得很好的答案。我将在这个答案中解释默认行为。
What will be the default behavior ? i.e if "Accept: */*"
来自官方文档。(完整阅读此文档以了解端到端)
如果仍然没有匹配,内容协商器只需选择第一个可以序列化类型的格式化程序。
总而言之,以下是顺序。
应用程序查找Accept
标题。如果接受标头值包含特定格式,它将使用该格式化程序。
如果*/*
为标题给出,则将选择列表中Accept
的第一项。config.Formatters
加分点:如果您尚未编辑config.Formatters
,则默认值为 json 值。