WebAPI返回数据类型解惑 以及怎样解决Extjs无法解析返回的xml

简介:  最近开始使用WebAPI,上手很容易,然后有些疑惑   1.WebAPI默认返回什么数据类型,json还是xml?  2.怎么修改WebAPI的返回数据类型,我用IE浏览器请 求返回的数据都是JSON格式的,用Firefox和Chrome返回数据格式是XML,然后自己用HttpWebReque...

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

为了使其能正确返回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的事例与大家分享,敬请期待

 

 

目录
相关文章
|
3月前
|
XML 数据采集 API
用Lxml高效解析XML格式数据:以天气API为例
免费Python教程:实战解析中国天气网XML数据,详解Lxml库高效解析技巧、XPath用法、流式处理大文件及IP封禁应对策略,助你构建稳定数据采集系统。
235 0
|
10月前
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `<appender>` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `<logger>` 和 `<root>` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
2449 1
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
10月前
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
389 15
|
存储 编译器 C语言
【C语言】数据类型全解析:编程效率提升的秘诀
在C语言中,合理选择和使用数据类型是编程的关键。通过深入理解基本数据类型和派生数据类型,掌握类型限定符和扩展技巧,可以编写出高效、稳定、可维护的代码。无论是在普通应用还是嵌入式系统中,数据类型的合理使用都能显著提升程序的性能和可靠性。
584 8
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
Dart 安全 编译器
Flutter结合鸿蒙next 中数据类型转换的高级用法:dynamic 类型与其他类型的转换解析
在 Flutter 开发中,`dynamic` 类型提供了灵活性,但也带来了类型安全性问题。本文深入探讨 `dynamic` 类型及其与其他类型的转换,介绍如何使用 `as` 关键字、`is` 操作符和 `whereType<T>()` 方法进行类型转换,并提供最佳实践,包括避免过度使用 `dynamic`、使用 Null Safety 和异常处理,帮助开发者提高代码的可读性和可维护性。
480 1
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器

推荐镜像

更多
  • DNS