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

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

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

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

【问题讨论】:

    标签: .net web-services rest serialization 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
    【解决方案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。 (完整阅读此文档以了解端到端)

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

      总而言之,以下是顺序。

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-18
        • 2023-03-22
        • 2012-04-08
        • 1970-01-01
        • 2012-07-13
        • 2013-08-26
        • 1970-01-01
        相关资源
        最近更新 更多