最近開始使用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 |