博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Web APi入门之移除XML格式(一)
阅读量:5776 次
发布时间:2019-06-18

本文共 1866 字,大约阅读时间需要 6 分钟。

前言

回头想来,没想到自己却坚持下来了,EntityFramework系列终于全部完成了,给自己点个赞先。本系列将着手于Web API,关于一些基础的介绍及定义就不再叙述,请参考园友们文章,非常详细,我也是在此基础上步入学习的。

简短介绍

我们知道Web API是基于ASP.NET平台构建RESTful应用程序的框架(关于RESTful请参考园友关于其详细介绍),通过访问在方法标记为HttpPost、HttpGet、HttpPut等得知。

问题探讨

我们知道Web API默认输出的格式为JSON,但是当我们进行测试时大部分浏览器输出的都是XML格式,这种情况真是令人唏嘘不已。下面我们就以火狐为例,同时利用它的Fire Bug进行监控。我们利用测试数据,并进行访问如下:

为何会出现如此情况呢?

我们利用Fire Bug查看其报文头信息来进行分析,如下:

因为Web API是根据检测请求头信息(Accept Header)来查找已经格式化注册的响应头信息(Content-Type)来确定它应该返回的输出类型。正是这种根据请求类型来响应相应类型的互动机制,使得Web API的功能变得强大,也就是说它能根据请求的透明来获得不同类型的输出。

大部分浏览器发送的都是如下请求头信息:

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

Web API检测上述信息是从左到右并且同时尝试通过从格式化注册的列表中去找到一个匹配它的并且支持的介质类型(meta type)。在此种情况下,application/xml与Xml Formatter匹配上了,所以会以XML格式进行输出并返回。

或许有些浏览器的可能请求信息为如下:

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

大部分浏览器中这样同样也是以XML格式打开,但是平时觉得在兼容方面非常恶心的IE 9模式下却是JSON,当然既然能以JSON打开肯定是没有包括application/xml了。

或许有些浏览器的可能请求信息为如下:

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

这更加不必多说了,这更加敏感的就暴露出要以XML格式输出了。

根本上解决方案

上述说了那么多都是以XML格式输出,如果在项目中需要大量的以JSON格式输出的数据的话,那么肯定会用到Web API了,我这才入门就是以这种方式回馈我,还能够好好的玩耍吗,看到园中大部分都是介绍大部分浏览器都是以XML格式输出的,但是却没给出一个解决方案,个人感觉有点欠妥,于是我就了解了下,通过上述我们知道请求过来的请求头信息是要和我们注册的格式进行匹配的并响应对应的格式,那么我们完全可以在匹配时做一点手脚将其请求过来的XML格式进行过滤不就ok了吗,此时就要用到我们Web API的配置文件 WebApiConfig 中的 Register 方法来进行过滤即可。

虽然我们很难改变浏览器的请求头信息,但是我们可以改变服务器的头信息,如下:

var formatters = config.Formatters.Where(formatter =>                  formatter.SupportedMediaTypes.Where(media =>                  media.MediaType.ToString() == "application/xml" || media.MediaType.ToString() == "text/html").Count() > 0) //找到请求头信息中的介质类型                  .ToList();            foreach (var match in formatters)            {                config.Formatters.Remove(match);  //移除请求头信息中的XML格式            }

检验一下 ,输出成功:

总结

至此Web API算是入门吧,一步步来,不着急,有问题就解决,多花点时间也是值得的,你说呢!!!

 

转载于:https://www.cnblogs.com/CreateMyself/p/4811103.html

你可能感兴趣的文章
crm 02--->讲师页面及逻辑
查看>>
AS3.0 Bitmap类实现图片3D旋转效果
查看>>
Eigen ,MKL和 matlab 矩阵乘法速度比较
查看>>
带三角的面包屑导航栏(新增递增数字)
查看>>
Web应用程序安全与风险
查看>>
codeforces 984 A. Game
查看>>
CSS居中
查看>>
One Person Game(概率+数学)
查看>>
CodeForces 258B Little Elephant and Elections :于1-m中找出七个数,使六个数里面的4和7个数比第七个数严格小:数位dp+dfs...
查看>>
MAP
查看>>
手把手教你测——上网快鸟
查看>>
用javascript获取地址栏参数
查看>>
一起谈.NET技术,你应该知道的15个Silverlight诀窍
查看>>
商教助手!解析夏普液晶高清宽屏投影机系列
查看>>
云南去年有望实现151万贫困人口净脱贫
查看>>
Java架构师面试题系列整理(大全)
查看>>
延伸产业链 中国产粮大省向“精深”问发展
查看>>
消费贷用户70%月收入低于5000元 80、90后是主要人群
查看>>
2018年内蒙古外贸首次突破1000亿元
查看>>
CTOR有助于BCH石墨烯技术更上一层楼
查看>>