前言

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

简短介绍

我们知道Web API是基于ASP.NET平台构建RESTful应用程序的框架(关于RESTful请参考园友Liam Wang关于其详细介绍),通过访问在方法标记为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算是入门吧,一步步来,不着急,有问题就解决,多花点时间也是值得的,你说呢!!!

Web APi入门之移除XML格式(一)的更多相关文章

  1. [WEB API] CLIENT 指定请求及回应格式(XML/JSON)

    [Web API] Client 指定请求及响应格式(xml/json) Web API 支持的格式请参考 http://www.asp.net/web-api/overview/formats-an ...

  2. Web API 入门 二 媒体类型

    还是拿上面 那篇 Web API 入门 一  的那个来讲 在product类中加一个时间属性

  3. 转载-Web API 入门

    An Introduction to ASP.NET Web API 目前感觉最好的Web API入门教程 HTTP状态码 Web API 强势入门指南 Install Mongodb Getting ...

  4. ASP.NET Web API中的JSON和XML序列化

    ASP.NET Web API中的JSON和XML序列化 前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok ...

  5. 【ASP.NET Web API教程】6.2 ASP.NET Web API中的JSON和XML序列化

    谨以此文感谢关注此系列文章的园友!前段时间本以为此系列文章已没多少人关注,而不打算继续下去了.因为文章贴出来之后,看的人似乎不多,也很少有人对这些文章发表评论,而且几乎无人给予“推荐”.但前几天有人询 ...

  6. Asp.Net Web API 2第十三课——ASP.NET Web API中的JSON和XML序列化

    前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本文描述ASP.NET W ...

  7. Web API 入门指南 - 闲话安全

    Web API入门指南有些朋友回复问了些安全方面的问题,安全方面可以写的东西实在太多了,这里尽量围绕着Web API的安全性来展开,介绍一些安全的基本概念,常见安全隐患.相关的防御技巧以及Web AP ...

  8. Web API入门指南(安全)转

    安全检测的工具站点:https://www.owasp.org/index.php/Category:Vulnerability_Scanning_Tools Web API入门指南有些朋友回复问了些 ...

  9. 【ASP.NET Web API教程】1 ASP.NET Web API入门

    原文 [ASP.NET Web API教程]1 ASP.NET Web API入门 Getting Started with ASP.NET Web API第1章 ASP.NET Web API入门 ...

随机推荐

  1. VPB和OSGGIS安装

    VPB和OSGGIS安装 转自:http://blog.sina.com.cn/s/blog_668aae780101k6pr.html 第一部分VPB安装 VirtualPlanetBuilder是 ...

  2. Ubuntu14.10搭建C++开发环境

    方法一:1、安装Eclipsesudo apt-get install eclipse2、安装Eclipse CDTsudo apt-get install eclipse-cdt3、安装Autoto ...

  3. UbuntuでPostgreSQLをインストールからリモートアクセスまでの手順

    PostgreSQLサーバの立ち上げに少しハマりましたので.メモしておきます. OS: Ubuntu14.04 LTS インストール 最初はPostgreSQLをインストールします.普通にapt-ge ...

  4. elasticsearch完全匹配

    $params = array( "body" => array( "query" => array( "filtered" = ...

  5. Html5+NodeJS——拖拽多个文件上传到服务器

    实现多文件拖拽上传的简易Node项目,可以在github上下载,你可以先下载下来:https://github.com/Johnharvy/upLoadFiles/. 解开下载下的zip格式包,建议用 ...

  6. xml中DTD解析

    DTD的作用是"文档类型的定义" DTD申明始终以<!DOCTYPE开头(开头后空一格). 本标签一共有三种写法 一.内部DTD: <!DOCTYPE 根元素 [ 文档 ...

  7. hexo建个人博客

    已经在腾讯云获得了域名和服务器,想着既然已经这样了,就折腾折腾自己的个人博客主页吧. 考虑再三决定用github pages来实现我的博客.github Pages可以被认为是用户编写的.托管在git ...

  8. 从零3D基础入门XNA 4.0(2)——模型和BasicEffect

    [题外话] 上一篇文章介绍了3D开发基础与XNA开发程序的整体结构,以及使用Model类的Draw方法将模型绘制到屏幕上.本文接着上一篇文章继续,介绍XNA中模型的结构.BasicEffect的使用以 ...

  9. oracle中查询、禁用、启用、删除表外键

    1.查询所有表的外键的: select table_name, constraint_name from user_constraints where constraint_type = 'R';   ...

  10. Module-Zero之组织单元(OU)管理【新增】

    返回<Module Zero学习目录> 概览介绍 OrganizationUnit实体 OrganizationUnit管理者 公共用例 设置 概览介绍 组织单元(Organization ...