【问题标题】:Advanced Rest Client - Using XML instead of JSON高级 Rest 客户端 - 使用 XML 代替 JSON
【发布时间】:2015-10-18 13:28:15
【问题描述】:

我正在点击以下控制器并在return result; 上有一个断点:

        [HttpGet]
        [ResponseType(typeof(PriceResponse))]
        [Route("Account/{id:int}/Price")]
        public IHttpActionResult Get(int id)
        {          
            var price = _priceService.GetPrice(id);
            var result = Ok(price);

            return result;
        }

我手动将result.Formatters[0].SupportedMediaTypes[0].MediaTyperesult.Formatters[0].MediaTypeMappings[0].MediaType.MediaType 的值从"application/json" 更改为"application/xml"。 但是,当我在 Chrome 的 Advanced Rest Client 中查看结果时,它在标题中正确显示了Content-Type: application/xml; charset=utf-8,但是“原始”响应正文仍然是 JSON 格式。 如何改为以 XML 显示?

编辑:我在请求的标头中有以下内容:

Svc-Channel: 302
Accept: application/xml

我已尝试单击选项并将下拉菜单设置为“application/xml”,但正文仍以 JSON 格式显示。

【问题讨论】:

  • 在请求标头中传递Accept:application/xml,看看会发生什么。删除Content-Type - 在HTTPGET 中传递内容类型标头是没有意义的。
  • 尝试检查请求的 Accept 标头 - 它可能设置为 application/json。如果是这样,请将其更改为 application/xml。
  • 我刚刚尝试过,但没有成功。我会更新我的问题。
  • 你能告诉我们endpointBehavior来自你的web.config吗?并且还使用WebInvoke属性并将ResponsenceFormat.Xml设置为返回类型。

标签: c# asp.net json xml rest


【解决方案1】:

我将假设(基于属性)您正在使用 Web API。

你在这里玩的是所谓的内容协商。 Web API 有一个很好的默认实现,记录在 here。控制这一点的最简单方法是使用“Accept”标头并传入所需的返回类型。 Web Api 自然会通过其管道处理所有这些。你所要做的就是在请求中使用“Accept”标头来控制它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-04
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 2023-04-08
    • 2016-10-14
    相关资源
    最近更新 更多