asp.net - 即使使用正确的 Accepts header ,WebAPI 也不返回 XML

标签 asp.net asp.net-web-api

我正在使用 ASP.NET WebAPI RC,并托管一个 API Controller ,没有什么特别的。使用 JSON 一切正常,但我正在测试使用 Accepts header 请求不同的格式,这就是我遇到麻烦的地方。

我使用 jQuery 发出 AJAX 请求,并设置请求的“dataType”参数。这会正确设置适当的 Accept header ,如下所示。

$.ajax({
    type: method,
    url: url,
    dataType: "xml",
    data: data || null,
    success: function (data) {
        // omitted
    }
});

这是 fiddler 请求/响应的保存。正如您所看到的,Accept header 显示为 application/xml,但 WebAPI 返回了 JSON。我还尝试手动将 Accept header 设置为“application/xml”(因此它也没有 text/html 内容),但无济于事。

我到底错过了什么? (注意:我剪掉了数据中的一些 secret 信息,但没有进行其他调整)

GET http://localhost/insp**snip**6716 HTTP/1.1
Host: localhost
Connection: keep-alive
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.60 Safari/537.1
Accept: application/xml, text/xml, */*; q=0.01
Referer: http://localhost/inspector/api/test?
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: m=34e2:|2c69:t|47ba:t|4e99:t; .INSPECTOR3COOKIE=08BA683091E2A457B1832E9B*snip*F911D9ED97076


HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
Persistent-Auth: true
X-Powered-By: ASP.NET
Date: Fri, 03 Aug 2012 22:27:42 GMT
Content-Length: 1816

{"Id":2416716,"ProjectId":36,"Url":"http://ins *snip, but obviously this is JSON not XML *

我想指出,我没有在 AppStart 或任何其他内容中调整任何格式化程序,因此据我了解,默认情况下应启用 JSON 和 XML 格式化程序。

更新:我想通了——检查下面我自己的答案

最佳答案

我明白了!

我在 AppStart 中有这个,因为我想要 Xml 序列化器而不是 DataContract 序列化器:

GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true;

但是...显然我的模型有一些问题使得 Xml 序列化程序认为它无法序列化它。我猜测这导致 WebAPI 决定使用 JSON 格式化程序。

这种看似无害的设置实际上可能会影响使用哪个格式化程序,这是完全不直观的。希望 WebAPI 的人看到这个:)

某种工具可以让您了解内容协商过程的输入和输出,以便您可以调试此类问题,那就太好了。

关于asp.net - 即使使用正确的 Accepts header ,WebAPI 也不返回 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11804301/

相关文章:

asp.net-web-api - 成员(member)重新启动用 Simple Injector 替换 Ninject

c# - WebApi 2 程序集解析器

asp.net - 将 Azure Functions 升级到 5.0 : System. UriFormatException

.net - Asp.net "Global"变量

c# - 如何在 ASP.Net Core 6.0 中实现 HSTS header ?

arrays - Angular 将带有字段的 API JSON 响应对象转换为数组

c# - 为 ASP.NET Web API 中的单个请求更改 JsonFormatter

asp.net - 重新导航时未调用 Page_Load

asp.net - gridview的item如何排列?

c# - Entity Framework 4 问题