我使用ASP.NET WebAPI RC,并托管一个API控制器,没有什么想象。一切工作正常与JSON,但我使用Accepts头测试请求不同的格式,这是我遇到了麻烦。
我使用jQuery发出一个AJAX请求,并设置请求的’dataType’参数。这正确设置了相应的Accept标头,如下所示。
$.ajax({ type: method,url: url,dataType: "xml",data: data || null,success: function (data) { // omitted } });
这里是fiddler请求/响应的保存。正如你可以看到Accept头指示application / xml,但WebAPI返回JSON。我也试过手动设置接受标题只是“application / xml”(所以它没有文本/ html东西),但没有效果。
我失去了什么? (注意:我已经在数据中删除了一些机密信息,但没有调整它否则)
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 Serializer认为它不能序列化它。我猜猜是导致WebAPI决定使用JSON格式化程序。
完全不直观的,这种无害的设置实际上可能影响使用哪个格式化程序。希望WebAPI人们看到这个:)
某种工具,让你了解内容谈判过程的输入和输出,所以你可以调试这样的问题会很好。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。