【问题标题】:MVC4 REST API always returns response in JSON formatMVC4 REST API 总是以 JSON 格式返回响应
【发布时间】:2014-09-11 22:35:49
【问题描述】:

我在我的最新项目中使用了 MVC4 Rest APi。但是我遇到了一个我无法弄清楚的问题。

我的请求同时支持 JSON 和 XML 格式,从我的请求中获得响应没有问题。

在测试时,我发现在使用"Advanced Rest Client" 访问此 API 时,即使我以 JSON 格式发送请求,响应始终是 XML 格式。

但如果我使用 Fiddler,它可以正常工作,即 JSON 请求提供 JSON 响应,XML 请求提供 XML 响应

Request headers 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
Origin: chrome-extension://hgmloofddffdnphfgcellkdfbfbjeloo
Content-Type: application/xml 
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8


Response headers 
Cache-Control: no-cache 
Pragma: no-cache 
Content-Type: application/json; charset=utf-8 
Expires: -1 
Server: Microsoft-IIS/8.0 
Date: Mon, 21 Jul 2014 12:01:27 GMT 
Content-Length: 340 

恐怕最终用户可能会面临同样的问题。那么有没有办法解决这个问题呢?

我能找到的只是强制使用我的 Web API 的一种格式来解决这个问题。但我必须同时支持这两种格式。

有办法吗?

谢谢

【问题讨论】:

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


    【解决方案1】:

    请求的Content-Type 标头规定来自服务器的响应类型,它用于确定请求类型。

    Web API 使用content negotiation 来确定响应的媒体类型,特别是Accept 标头。为确保 XML 响应,您需要设置 Accept 标头,如

    Accept: application/xml;
    

    【讨论】:

    • 是的,我读到过,但理想情况下,我想用 JSON 响应响应 JSON 请求,用 XML 响应响应 XML 请求。即使对 JSOn 请求,我也不想强制 XML 响应。有可能吗?
    • @hellrokr 响应类型可以由请求的其他因素确定,即如果您省略 Accept 标头并提供它应该使用 XML 响应的 XML 正文(与 JSON 相同)。
    • 接受这个作为答案,但这不起作用。我不得不使用接受:应用程序/xml。添加“/”,再次以 JSON 格式返回响应。您可以在浏览器中试用。
    • 如果是这种情况,@hellrokr */* 必须优先考虑(尽管我认为顺序决定了这一点)。无论如何,这是一个例子,答案更多的是使用 Accept 标头(我已经更新了答案)。
    猜你喜欢
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 2017-12-15
    相关资源
    最近更新 更多