最近開始使用WebAPI,上手很容易,而後有些疑惑html
1.WebAPI默認返回什麼數據類型,json仍是xml?
2.怎麼修改WebAPI的返回數據類型
,我用IE瀏覽器請求返回的數據都是JSON格式的,用Firefox和Chrome返回數據格式是XML,而後本身用HttpWebRequest請求返回的是JSON格式的,我就納悶了,咋一樣的程序、一樣的配置文件,輸出數據格式爲啥還帶不同的,就算你默認輸出json或者xml均可以理解,咋還不一樣瀏覽器,輸出格式不一樣,通過一番研總算搞懂了緣由chrome
通過測試發現使用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瀏覽器的請求頭json
瀏覽器 | 返回數據格式 | accept請求頭 |
IE | json | text/html, application/xhtml+xml, */*瀏覽器 |
Firefox | xml | text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,*/*app |
Chrome | xml | text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,*/*測試 |
繼續進行以下測試xml
1.只發送accept:application/json,結果返回了jsonhtm
2.只發送accept:application/xml,結果返回了xmlio
3.同時發送accept:application/xml,application/json,結果返回了jsontable
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 |