WebAPI返回数据类型解惑

Posted 智者无疆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WebAPI返回数据类型解惑相关的知识,希望对你有一定的参考价值。

原文:http://www.cnblogs.com/lzrabbit/archive/2013/03/19/2948522.html

 

  最近开始使用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浏览器的请求头

浏览器 返回数据格式 accept请求头
IE json

text/html, application/xhtml+xml, */*

Firefox xml

text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,*/*

Chrome xml

text/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
   

以上是关于WebAPI返回数据类型解惑的主要内容,如果未能解决你的问题,请参考以下文章

Asp.Net WebAPI配置接口返回数据类型为Json格式

Asp.Net WebAPI配置接口返回数据类型为Json格式

ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml)

转载C#.NET WebApi返回各种类型(图片/json数据/字符串),.net图片转二进制流或byte

PHP基础解惑===和==的区别

[经验分享]WebAPI中返回类型JsonMessage的应用