【问题标题】:Why not use content negotiation to return JSON object?为什么不使用内容协商返回 JSON 对象?
【发布时间】:2015-01-23 02:18:34
【问题描述】:

我正在使用 content negotiation 从一些 WebAPI 控制器返回一个 JSON 对象。

我发现了这个问题 How to return Json object on Web API Controller

这里有些回答的人似乎同意你不应该依赖谈判,而应该为 JSON 返回创建一个新的 HttpContent 类。

请问这是为什么?作为初学者,内容协商似乎效果很好。

我已经搜索过这个答案,但找不到解释。

【问题讨论】:

    标签: json asp.net-mvc-4 rest asp.net-web-api


    【解决方案1】:

    如果我必须给你这个例子,那么请使用默认模板创建 web api。这包含值控制器。

    现在转到 chrome 浏览器并请求数据,然后转到 IE 并请求数据。在 chrome 中您将获得 XML 数据,而在 IE 中您将获得 JSON 数据。 (它要求下载 json)。

    现在,如果您使用 fiddler 之类的工具并查看请求,那么您会发现两个浏览器的请求标头有所不同。

    因此,如果您确定始终需要 json 数据,那么最好从控制器操作返回 JSON 数据。如果您不想这样做并且仍然希望您的所有请求都返回 JSON,那么请使用 application/json 设置标头“Accept”。

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

    简而言之,如果您希望您的 api 始终通过 json 数据进行通信,那么最好返回 json 类型的结果,而不是依赖于内容协商。

    【讨论】:

      【解决方案2】:

      ASP.Net Web API 在其最纯粹 形式中旨在创建 REST ful Web 服务。

      根据 REST 完整标准,客户端应该能够决定响应是否应该是 XML/JSON 响应。这可以在请求中使用 Content-negotiation 标头来实现。

      这意味着您的理解是正确的,使用内容协商您可以决定是否需要在 ASP.Net Web API 中进行 XML/JSON 响应。

      【讨论】:

        猜你喜欢
        • 2014-02-23
        • 1970-01-01
        • 2018-07-23
        • 2011-06-28
        • 1970-01-01
        • 2021-09-30
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多