Web API
一、Wep API 定义
官方定义如下,强调两个关键点,即可以对接各种客户端(浏览器,移动设备),构建http服务的框架。新生成的WebAPI项目和典型的MVC项目一样,包含主要的Models、Views、Controllers等文件夹和Global.asax文件。
ASP.NET Web API
ASP.NET Web API is a framework that makes it easy to build HTTP services that reach a broad range of clients, including browsers and mobile devices. ASP.NET Web API is an ideal platform for building RESTful applications on the .NET Framework.
二、为什么需要Web API
2.1、Web API最重要的是可以构建面向各种客户端的服务。另外与WCF REST Service不同在于,Web API利用Http协议的各个方面来表达服务(例如 URI/request response header/caching/versioning/content format),因此就省掉很多配置。
2.2、由ASP.NET 4.0引入,适合编写轻量级,restful的web服务,特别,这种简单的请求和返回数据的格式(比如纯文本或者json)特别适合js客户端的调用
三、区别
3.1、Web API 和MVC 区别
- MVC主要用来构建网站,既关心数据也关心页面展示,而Web API只关注数据
- Web API支持格式协商,客户端可以通过Accept header通知服务器期望的格式
- Web API支持Self Host,MVC目前不支持
- Web API通过不同的http verb表达不同的动作(CRUD),MVC则通过Action名字表达动作
- Web API内建于ASP.NET System.Web.Http命名空间下,MVC位于System.Web.Mvc命名空间下,因此model binding/filter/routing等功能有所不同
- 最后,Web API非常适合构建移动客户端服务
3.2、Web API 和 WCF 、ASP.NET WebService、Web Servce区别
3.2.1、Web API是 asp.net 4.0引入的,适合编写那些轻量级的,restful的web服务,特别,这种简单的请求和返回数据的格式(比如纯文本或者json)特别适合js客户端的调用
3.2.2、WCF 是一个分布式应用的开发框架,属于特定的技术,或者平台是.net 3.0引入的,它是最重量级的,特别它除了支持http绑定,还支持直接的tcp/ip、named pipe等协议,安全模型和并发模型健全而容易扩展,因此它的性能、灵活性最好,特别适合那些桌面程序、基于silverlight的ria程序、分布式组件和程序、需要高性能和可靠性的场合。
WCF其实一定程度上就是ASP.NET Web Service,因为它支持Web
Service的行业标准和核心协议,因此ASP.NET Web
Service和WSE能做的事情,它几乎都能胜任,跨平台和语言更不是问题(数据也支持XML格式化,而且提供了自己的格式化器)。
但是WCF作为微软主推一个通讯组件或者平台,它的目标不仅仅是在支持和集成Web
Service,因为它还兼容和具备了微软早期很多技术的特性。
根据微软官方的解释,WCF(之前的版本名为“Indigo”)是使用托管代码建立和运行面向服务(Service
Oriented)应用程序的统一框架。它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案,且能与已有系统兼容协作。WCF是微软分布式应用程序开发的集大成者,它整合了.Net平台下所有的和分布式系统有关的技术,如Enterprise
Sevices(COM+).Net Remoting、Web
Service(ASMX)、WSE3.0和MSMQ消息队列。以通信(Communiation)范围而论,它可以跨进程、跨机器、跨子网、企业网乃至于
Internet;以宿主程序而论,可以以ASP.NET,EXE,WPF,Windows Forms,NT
Service,COM+作为宿主(Host)。WCF可以支持的协议包括TCP,HTTP,跨进程以及自定义,安全模式则包括SAML,
Kerberos,X509,用户/密码,自定义等多种标准与模式。也就是说,在WCF框架下,开发基于SOA的分布式系统变得容易了,微软将所有与此相关的技术要素都包含在内,掌握了WCF,就相当于掌握了叩开SOA大门的钥匙。(MSDN)
3.2.3、ASP.NET Web Service:微软提供了Web服务的开发框架,属于ASP.NET Framework的一部分,但是支持早起的WS规范。比如SOAP1.1。
3.2.4、Web Service:严格来说是行业标准,也就是Web Service 规范,也称作WS-*规范,既不是框架,也不是技术。它有一套完成的规范体系标准,而且在持续不断的更新完善中。使用XML扩展标记语言来表示数据(这个是夸语言和平台的关键)。
四、Web API 小Demo
创建项目MVC
2、选择API
命名空间System.Web.Http
新建一个控制器Evidence,简单的一些业务逻辑
public class EvidenceController : ApiController { public string Get(string code) { PNOMethod pnoMethod = new PNOMethod(); EvidenceBook eBook = pnoMethod.QueryEvidence(code); return JsonConvert.SerializeObject(eBook); } //public string Get() //{ // return "value"; //} }
如何调用
http://localhost:6179/api/Evidence/?code=4B2B63633F5D3B1A
效果
五、JavaScript调用Web API
@{ Layout = null; } <!DOCTYPE html> <html lang="en"> <head> <title>RenosData.Qrcode.Query</title> @Styles.Render("~/content/Site.css") @Scripts.Render("~/scripts/jquery-1.8.2.min.js") </head> <body id="body"> <div class="main-content"> <div> <h1>二维码证据查询</h1> <ul id="products" /> </div> <div> <label for="id">二维码:</label> <input type="text" id="id" size="5" /> <input type="button" value="Search" id="btnQuery" /> <p id="evidence" /> </div> </div> </body> </html> <script type="text/javascript"> $(function () { $("#btnQuery").on("click", function () { var id = $(‘#id‘).val(); $.getJSON("api/Evidence/?code=" + id, function (data) { var vJosn = eval(‘(‘ + data + ‘)‘); $(‘#evidence‘).html("二维码:" + vJosn.QrCode + "<br/>上报时间:" + vJosn.QrCodeReportTime + "<br/>证据编号:" + vJosn.EvidenceCode + "<br/>证据名称:" + vJosn.EvidenceName); }).fail(function (jqXHR, textStatus, err) { $(‘#evidence‘).text(‘Error: ‘ + err); }); }); }); </script>
结果: