zoukankan      html  css  js  c++  java
  • WebAPI返回数据类型解惑

    WebAPI返回数据类型解惑

      最近开始使用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
       
  • 相关阅读:
    第三方驱动备份与还原
    Greenplum 解决 gpstop -u 指令报错
    yum安装(卸载)本地rpm包的方法(卸载本地安装的greenplum 5.19.rpm)
    Java JUC(java.util.concurrent工具包)
    netty 详解(八)基于 Netty 模拟实现 RPC
    netty 详解(七)netty 自定义协议解决 TCP 粘包和拆包
    netty 详解(六)netty 自定义编码解码器
    netty 详解(五)netty 使用 protobuf 序列化
    netty 详解(四)netty 开发 WebSocket 长连接程序
    netty 详解(三)netty 心跳检测机制案例
  • 原文地址:https://www.cnblogs.com/ching2009/p/5633054.html
Copyright © 2011-2022 走看看