WebAPI返回数据类型解惑 以及怎样解决Extjs无法解析返回的xml
来源:互联网 发布:asp网站怎么连接数据库 编辑:程序博客网 时间:2024/04/29 04:38
最近开始使用WebAPI,上手很容易,然后有些疑惑
1.WebAPI默认返回什么数据类型,json还是xml?
2.怎么修改WebAPI的返回数据类型
,我用IE浏览器请 求返回的数据都是JSON格式的,用Firefox和Chrome返回数据格式是XML,然后自己用HttpWebRequest请求返回的是JSON格 式的,我就纳闷了,咋同样的程序、同样的配置文件,输出数据格式为啥还带不一样的,就算你默认输出json或者xml都可以理解,咋还不同浏览器,输出格 式不同,经过一番研总算搞懂了原因
经过测试发现使用IE浏览器返回的数据是json,而使用Firefox和Chrome返回的则为xml,经研究发现IE在发生http请求时请求头accpet节点相比Firefox和Chrome缺少"application/xml" 类型,由于WebAPI返回数据为xml或json格式,IE没有发送可接受xml和json类型,所以默认为json格式数据,而Firefox和 chrome则发送了可接受xml类型,故返回了xml数据,下面是IE、Firefox和Chrome浏览器的请求头
text/html, application/xhtml+xml, */*
Firefox xmltext/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,*/*
Chrome xmltext/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,*/*
继续进行如下测试
1.只发送accept:application/json,结果返回了json
2.只发送accept:application/xml,结果返回了xml
3.同时发送accept:application/xml,application/json,结果返回了json
4.同时发送accept:application/json,application/xml,结果返回了json
5.修改优先级同时发送application/xml;q=1.0,application/json;q=0.9,结果返回了xml
由此可以得出结论:
WebAPI的返回数据类型是有请求头的accept来决定的,默认返回类型为json
1.application/json和application/xml都没有时,返回json数据
2.仅有application/json时,返回json数据
3.仅有application/xml时,返回xml数据
4.同时有application/json和application/json时,返回数据类型和两者的顺序无关,若两者优先级相同则返回json,若优先级不同则返回优先级高的类型
详见下表:
Accept头 返回类型 application/json json application/xml xml application/xml,application/json json application/json,application/xml json application/xml;q=1.0,application/json;q=1.0 json application/xml;q=0.9,application/json;q=0.9 json application/xml;q=1.0,application/json;q=0.9 xml application/xml;q=0.9,application/json;q=1.0 json
为了使其能正确返回json数据需要进行如下操作:
1.在程序里找到webapiconfig.cn如图:
2.添加如下代码:
public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); // New code: var json = config.Formatters.JsonFormatter; json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects; config.Formatters.Remove(config.Formatters.XmlFormatter); }
好,在重新调试就不会出现Extjs无法解析什么什么的错误了.唉,这个问题困扰了我一天,总是想办法怎样去重新把数据转换成json,殊不知问题这么容易被解决了
随后我会把Extjs+webapi+Mvc4+EFmodel的事例与大家分享,敬请期待
<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- WebAPI返回数据类型解惑 以及怎样解决Extjs无法解析返回的xml
- webapi 返回数据类型控制(json,xml)
- webapi 返回的字符串自动加双引号的解决
- 解析后台返回的XML
- Extjs 使用fileText 文件上次后 无法解析后台返回的json问题
- WebApi返回Xml和返回json处理方法
- 安卓使用Gson解析服务器返回Json数组,以及java服务器怎样返回list集合的Json数据(原创)
- ajaxfileupload以JSON为返回数据类型出现的因符号无法解析的错误的解决方案
- ajaxfileupload以JSON为返回数据类型出现的因符号无法解析的错误的解决方案
- 关于解决无法获取AJAX中无法获取XML返回的问题
- 解决ajax程序访问服务器返回的XML文件时, firebug出现: XML 解析错误问题
- WCF 无法返回JSON 数据类型
- 解决struts无法返回json的方法
- vb 解析webservice返回的xml整理
- java调用http,解析返回的xml
- jquery 解析返回的xml和json
- springmvc 解析url 返回的xml数据
- ASP.Net WebAPI的返回值
- 女人这条路
- STM32 CortexM3 中断 学习笔记!
- (转)系统调用与API
- 这个时代“寒门再难出贵子”
- java反射技术
- WebAPI返回数据类型解惑 以及怎样解决Extjs无法解析返回的xml
- iPhone 中打开或关闭软键盘时调整 UIScrollView 的大小
- 教你用C语言隐藏磁盘|一键隐藏分区可随时恢复
- MINA
- WPF样式和行为
- Struts2技术内幕笔记1(web开发浅谈)
- 用JAXB生成一个XML文档
- 安装msdn后 数据库或者vs加载插件报错问题
- 2013年4月21日——2013年6月15日(英语四级结束)