快速入门系列--WebAPI--03框架你值得拥有
来源:互联网 发布:王者荣耀数据模拟器 编辑:程序博客网 时间:2024/05/19 06:50
接下来进入的是俺在ASP.NET学习中最重要的WebAPI部分,在现在流行的互联网场景下,WebAPI可以和HTML5、单页应用程序SPA等技术和理念很好的结合在一起。所谓ASP.NET WebAPI,其核心概念就是构建REST风格的Web服务,把一起数据视为资源,无论是服务请求或者是数据操作,与以前的SOAP和XML-RPC架构风格有很大不同。说道这,很多读者可能想到WCF中不是早都有了REST风格的服务么,为什么还需要这个WebAPI?确实如此,不过WCF中的该类型服务显得比较复杂,因为其通信管道的构成由于集成了多种不同的通信协议,自然的其基础程序集就显得非常的庞大臃肿。
简单来说,WebAPI就是简单高效,"你值得拥有"!让我们通过临摹蒋老师的例子对它有个初步的了解,后端代码如下:
前端代码如下:
这个像补充的是,蒋老师在这用的是自带的knockoutJS作为MVVM风格的部分前端框架。关于这一块,有一个问题困扰了我很久,就是KnockoutJS和AngularJS谁的适用性更强,其实它们没有可比性,KnockoutJS只提供了部分的工作。以下链接是对此问题的解释,结论是我将学习并使用AngularJS。
http://blog.darkthread.net/post-2014-06-07-go-to-angularjs.aspx
说到这,我还想到了学习中的一个困惑,那么多的IOC框架到底哪个相对更好一些?结论是Autofac,它以被使用在Orchard开源的CMS系统中,顺道提一嘴,nopCommerce的.net开源电商系统也不错哦。之前IOC框架对比的详情请见如下链接,李平老师做了最好的解释:
http://www.cnblogs.com/liping13599168/archive/2011/07/17/2108734.html
接下来,介绍ASP.NET WebAPI的服务器管道,这一块和之前学习的ASP.NET MVC管道很相似,但也有一些差异,不过个人感觉这个管道更加的像J2EE的管道了。由于很多内容比较相似,将进行简单的介绍,不过框架中异步编程模型用的很多,值得学习参考。下图简单的表述了框架对请求的处理过程:
框架通过单例提供HttpControllerHandler对象,多个HttpWebRoute共享对象,并且它将创建右侧的ASP.NET Web API处理管道,通过调用BeginProcessRequest方法激活管道运转。该管道其实就是HttpMessgaeHandler链,HttpServer和HttpControllerDispatcher可以看做两个特殊的HttpMessageHandler,接下来通过表格的形式对相关类型进行简单的介绍:
HttpControllerHandler以延迟加载的方式来创建HttpServer,字典属性Properties以Key为"MS_HttpContext"、"MS_HttpRouteData"的形式传递相关数据。HttpControllerDispatcher负责最后对请求做最后的处理,包括对ApiController的激活和目标Action的执行等操作,用下表简述该过程:
补上IOC实现的代码和HttpParameterBinding的流程图:
HttpParameterBinding流程图:
最后介绍与WebAPI客户端调用相关的内容,提到调用大家第一反应就是在Web页面中通过javascript进行Ajax调用,获取数据并呈现,服务的消费者是前端页面,这只是调用的主要方式之一。另外一种就是通过HttpClient来进行调用,这和Web Service调用很相似,服务的消费者是一般应用程序。HttpClient类继承之抽象类HttpMessageInvoker,核心方法SendAsync包括HttpRequestMessage的参数和HttpResponseMessage的返回类型,和之前服务器端的HttpMessageHandler类型一样,实际上HttpClient就是一个该类的封装。HttpCompletionOption用于设置响应完成的标志,包括读完消息头和读完消息体。属性BaseAddress用于指定WebAPI基地址,DefaultRequestHeader用于添加任意的报头,MaxResponseContentBufferSize表示读取缓存区的大小,默认2G,Timeout表示超时时限,默认100s。GetAsync, GetByteArrayAsync, GetStreamAsync, GetStringAsync用于HTTP-GET请求,其他方法也有相似定义。下面通过一个服务器端自我寄宿,客户端一般调用的例子完成学习,需要注意通过Nuget添加SelfHost和Client的库,代码如下所示:
此外,WebAPI学习系列目录如下,欢迎您的阅读!
快速入门系列--WebAPI--01基础
快速入门系列--WebAPI--02进阶
快速入门系列--WebAPI--03框架你值得拥有
快速入门系列--WebAPI--04在老版本MVC4下的调整
注:本文主要供自己学习,不妥之处望见谅。
参考资料:
[1]蒋金楠. ASP.NET MVC4框架揭秘[M]. 上海:电子工业出版社, 2012. 445-526
- 快速入门系列--WebAPI--03框架你值得拥有
- 你值得拥有的十佳Python框架
- 快速了解一个行业的秘籍,你值得拥有
- 快速了解一个行业的秘籍,你值得拥有
- 你值得拥有
- 大嘴首发J2EE框架,Bigmouth-framework你值得拥有!
- Saluton+ 1.0 你值得拥有!
- swift笔记,你值得拥有!
- 3.Material_EditText 你值得拥有
- 睿显PD280, 你值得拥有
- 这个网站, 你值得拥有!
- ADB SHELL 你值得拥有
- 正则表达式,你值得拥有!
- ggplot2之你值得拥有
- 数据库管理,你值得拥有
- 完美扫雷游戏,你值得拥有
- NFC关门开锁,你值得拥有
- SolrCloud你值得拥有,性能表现良好
- Centos7 无法联网以及安装桌面问题的解决
- Android6.0/7.0 获取用户权限(未封装,简单版)
- VS 提示:请考虑使用 app.config 将程序集“XXX”从版本“XX”重新映射到版本“XX”,以解决冲突并消除警告。
- java判断字符串是否为空的方法总结
- Composer快速入门(张高伟)
- 快速入门系列--WebAPI--03框架你值得拥有
- 【玩转数据系列十三】机器学习算法基于信用卡消费记录做信用评分
- idea 使用mybatis plugin插件
- 别再到处搜php类扩展包了;进入composer的时代吧
- 理解Java机制最受欢迎的8幅图
- 网络请求框架
- mysql group_concat函数的使用
- WebView如何使用
- 为Android刷机包签名