ASP.NET4.5Web API及非同步程序开发系列(2)

认识ASP.NET WEB API

他的前身为WCF WEB API用于协助WCF支持RestFul。如今集成进ASP.NET,正式改名为ASP.NET WEB API,ASP.NET Web API是一个用来在.NET框架上创建web API的框架。web

    • 支持利用HTTP协议在.NET FRAMEWORK创建HTTP服务
    • 协助客户端程序利用GET/POST命令传送XML/JSON文件进行呼叫并取回结果

不少大型网站都提供了WEB API 的功能,例如Facebook、Twitter、LinkedIn,以及Netflix等数据库

 HTTP服务vs网页

  HTTP不只服务于web页面。它也是创建暴露服务与数据的API(应用程序编程接口)的功能强大的平台。HTTP简单、灵活且无处不在。几乎你所能想到的任何平台都有一个HTTP库,所以,HTTP服务可以到达范围普遍的客户端,包括浏览器、移动设备、以及传统的桌面应用程序。编程

 

 ASP.NET4.5 WEB API的架构

 ASP.NET4.5 WEB API的架构的优势

  • 支持多种形态的客户端,包括浏览器,智能手机,Windows应用程序,平板等
  • 非同步执行,具备更好的延展性最大限度的利用HTTP协议的优点
  • Web API其实并非轻量级的,但它只针对一个协议来支持API,它不会产生不少超重的包袱
  • Web API与ASP.NET MVC的密切集成

 

 

 

ASP.NET4.5 WEB API的功能

  •  HTTP程序设计模型:接受HTTP Request请求,回应HTTP Response
  • 内容格式的协调:默认的内容为XML,JSON,与URL编码模式
  • 支持Restful
  • 模型绑定与验证:依据HTTP Requst内容创建的对象,易于使用和验证
  • 支持MVC Framework的路由机制
  • 支持Arrtibute(例如[Authorize])特性进行方法的控制
  •  易于单元测试:支持利用HTTPRequestMessage和HTTPResponseMessage类型进行单元测试
  • 支持 Service Locator Pattern:易于与IoC 容器或依赖注入框架进行整合,方便依赖性的管理
  • 弹性的宿主选择:支持装载在ASP.NET MVC网站,ASP.NET WEBFROM网站,或是Window应用程序中。

是否是发现,和咱们以前学的MVC3知识点好类似,不错,感受就是一种平滑的过渡api

 利用WEB API 创建HTTP服务

     学习WEBAPI我以为重点是先熟悉他的路由,因为支持RestFul,因此不少时候模板给出的方法命名,以及路由的导向方式,让不少人误觉得是很陌生的新技术,望而却步。浏览器

 首先咱们从MVC4 的WEB API模板自动建立的文件进行分析

namespace MyFristWebAPI.Controllers
{
    public class ValuesController : ApiController
    {
        // GET api/values
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/values/5
        public string Get(int id)
        {
            return "value";
        }

        // POST api/values
        public void Post([FromBody]string value)
        {
        }

        // PUT api/values/5
        public void Put(int id, [FromBody]string value)
        {
        }

        // DELETE api/values/5
        public void Delete(int id)
        {
        }
    }
}

 

  方法名好有特点,GET,POST,PUT,DELETE,并且每一个方法上面都给出了他的路由,为其指定了一个的Uri,好吧,若是你感受到不习惯,咱们就进行下面的解释:网络

  WCF 很好的支持了 REST 的开发, 而 RESTful 的服务一般是架构层面上的考虑。 由于它天生就具备很好的跨平台跨语言的集成能力,几乎全部的语言和网络平台都支持 HTTP 请求,无需去实现复杂的客户端代理,无需使用复杂的数据通信方式既能够将咱们的服务暴露给任何须要的人,不管他使用 VB、Ruby、JavaScript,甚至是 HTML FORM,或者直接在浏览器地址栏输入。 
WCF 中经过 WebGetAttribute、WebInvokeAttribute (GET/PUT/POST/DELETE)、UriTemplate 定义 REST 的服务的调用方式, 经过 WebMessageFormat (Xml/Json) 定义消息传递的格式。
架构

  REST属于一种设计风格,REST POST(新增数据),GET(取得数据),PUT(更新数据),DELETE(删除数据)来进行数据库的增删改查,而若是开发人员的应用程式符合REST原则,则它的服务为“REST风格Web服务“也称的RESRful Web API”。框架

ASP.NET Web API 遵循着如下原则:

类型继承了ApiController,有别于MVC 继承自Controller
以MVC 的习惯配置原则,Web API 的Controller 也放在Controllers 数据夹内
预设URL 格式为localhost/api/{controller}/{id}
Action 皆以HTTP 动词开头Get、Post、Put、Delete单元测试

从Values​​Controller 能够看到,具有了前面说的CRUD 四种方法,并且在Action 中也不用使用[HttpGet]、[HttpPost] 等修饰,那究竟它是如何运做的呢?打个比喻,假设今天服务端收到了一个GET 请求时,会去查找对应的Controller 而且Action 以"Get..." 开头的function ,EX:GetMembers、GetTime,以此类推,若是咱们已jQuery Ajax 发出了一个POST 请求,也会自动对应到以"Post..." 开头的Action 内,也就是说实际呼叫哪一个Controller 的Action 不是利用网址来决定,而是依照HTTP 所送出的请求来决定,这也就是很是典型的REST-Style,而在Web API 中也处理了回传的数据,让咱们看看Get() 这个方法,回传IEnumerable<T> 的方法,等于咱们拥有了强类型。学习

而在App_Star 文件夹内的WebApiConfig.cs ,定义了Web API 的路由设定,从路由上能够很是清楚看到,预设的URL 以从本来MVC 的/{controller}/{action}/{id} 改变为/api/{controller}/{id} 了,这也是前面说到的咱们再也不须要知道哪一个Controller 对应到哪一个Action 而是以HTTP 接收到的命令为主,以下:

 routes.MapHttpRoute(                 name: "DefaultApi",                  routeTemplate: "api/{controller}/{id}",                  defaults: new { id = RouteParameter.Optional }            );

 

 谈完了路由后,咱们就能够来写一个简单的Web API 了,首先能够创建一个ASP.NET MVC 4 的空白解决方案,固然要创建Web API 模板项目也能够,而后咱们新增一个空白的AccountController:

 

 建立好后加入如下代码:

public class AccountController : ApiController
    {
        public HttpResponseMessage RequestToken(string ConsumerKey, string ConsumerSecret)
        {
            return Request.CreateResponse(HttpStatusCode.OK);
        }

        public HttpResponseMessage AccessToken(string ConsumerKey, string Verifier)
        {
            return Request.CreateResponse(HttpStatusCode.OK);
        }
    }

 而后启动Fiddler,按F5 启动应用程式,此时浏览器会出现,但会显示找不到网页的讯息,毕竟咱们使用的是Web API,理论上是不可能会有浏览器看得懂的HTML内容,因此咱们能够到项目的属性中,设定不启动浏览器:

启动完成后,咱们按照/api/{controller} 的格式,去呼叫/api/account/RequestToken,会获得这样的讯息:

结果发现这个方法是无效的,这是为何?若是說我們使用的方法名稱不是 Get/Post/Put/Delete 的規則時,我們就必定要宣告它的接受动词 (Accept Verb),因此咱们能够修改以下代码:

 public class AccountController : ApiController
    {
        [HttpGet]
        public HttpResponseMessage RequestToken(string ConsumerKey, string ConsumerSecret)
        {
            return Request.CreateResponse(HttpStatusCode.OK);
        }

        [HttpGet]
        public HttpResponseMessage AccessToken(string ConsumerKey, string Verifier)
        {
            return Request.CreateResponse(HttpStatusCode.OK);
        }
    }

 

而后咱们再试一次,获得以下结果(访问/api/account/RequestToken?ConsumerKey=abc&ConsumerSecret=123):

咱们发现成功了一样的方法测试另外一个也成功了。

 

     未完待续....以后将对oData的支持,多媒体支持,Jquery调用WEB API等进行笔记总结。

     备注:我也是刚刚开始学习,参阅了不少前辈的文章,因此版权的归你们全部,不归本人全部,若是你喜欢本文的话,推荐共勉,谢谢!

相关文章
相关标签/搜索