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

时间:2021-07-13 19:35:15

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

认识ASP.NET WEB API

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

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

很多大型网站都提供了WEB API 的功能,例如Facebook、Twitter、LinkedIn,以及Netflix等

HTTP服务vs网页

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

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

ASP.NET4.5 WEB API的架构

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

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

ASP.NET4.5Web 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知识点好相似,不错,感觉就是一种平滑的过渡

利用WEB API 建立HTTP服务

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

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

ASP.NET4.5Web 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)
{
}
}
}
ASP.NET4.5Web API及非同步程序开发系列

  方法名好有特色,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> 的方法,等于我们拥有了强类型。

从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:

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

创建好后加入以下代码:

ASP.NET4.5Web API及非同步程序开发系列
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);
}
}
ASP.NET4.5Web API及非同步程序开发系列

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

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

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

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

结果发现这个方法是无效的,这是为什么?如果說我們使用的方法名稱不是 Get/Post/Put/Delete 的規則時,我們就一定要宣告它的接受动词 (Accept Verb),所以我们可以修改如下代码:

ASP.NET4.5Web API及非同步程序开发系列
 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);
}
}
ASP.NET4.5Web API及非同步程序开发系列

然后我们再试一次,得到如下结果(访问/api/account/RequestToken?ConsumerKey=abc&ConsumerSecret=123):

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

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

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

     备注:我也是刚刚开始学习,参阅了很多前辈的文章,所以版权的归大家所有,不归本人所有,如果你喜欢本文的话,推荐共勉,谢谢!

 
 

ASP.NET4.5Web API及非同步程序开发系列的更多相关文章

  1. ASP&period;NET4&period;5Web API及非同步程序开发系列3

    ASP.NET4.5Web API及非同步程序开发系列(3) 接着上一篇博客的内容做一个补充,正好是一个大哥提出来的,我们看看一个有趣的现象. 请求相关问题的补充: 我们先在Controller中的定 ...

  2. ASP&period;NET4&period;5Web API及非同步程序开发系列&lpar;1&rpar;

    认识非同步程序开发设计模型 从VS2012开始引入的新的非同步程序设计的支持-------async/await设计模型 之前的当我们支持非同步作业的时候,往往使用多线程开解决,我们比较熟悉的就是 执 ...

  3. ASP&period;NET4&period;5Web API及非同步程序开发系列&lpar;2&rpar;

    认识ASP.NET WEB API 他的前身为WCF WEB API用于协助WCF支持RestFul.现在集成进ASP.NET,正式更名为ASP.NET WEB API,ASP.NET Web API ...

  4. ASP&period;NET4&period;5Web API及非同步程序开发系列&lpar;3&rpar;

    接着上一篇博客的内容做一个补充,正好是一个大哥提出来的,我们看看一个有趣的现象. 请求相关问题的补充: 我们先在Controller中的定义一个我们在前一篇博客中已经测试过的方法如下: public ...

  5. 微信小程序开发系列六:微信框架API的调用

    微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发系列四:微信小程序 ...

  6. 微信小程序开发系列七:微信小程序的页面跳转

    微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发系列四:微信小程序 ...

  7. WordPress版微信小程序开发系列&lpar;二&rpar;&colon;安装使用问答

    自WordPress版微信小程序发布开源以来,受关注的程度超过我原来的想象.这套程序主要面对的用户是wordpress网站的站长,如果wordpress站想在微信的生态圈得到推广,小程序成为一种重要的 ...

  8. 微信小程序开发系列二:微信小程序的视图设计

    大家如果跟着我第一篇文章 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 一起动手,那么微信小程序的开发环境一定搭好了.效果就是能把该小程序的体验版以二维码的方式发送给其他朋友使用. 这个系列 ...

  9. 【微信小程序开发•系列文章六】生命周期和路由

    这篇文章理论的知识比较多一些,都是个人观点,描述有失妥当的地方希望读者指出. [微信小程序开发•系列文章一]入门 [微信小程序开发•系列文章二]视图层 [微信小程序开发•系列文章三]数据层 [微信小程 ...

随机推荐

  1. 创建ASP&period;NET Core MVC应用程序&lpar;3&rpar;-基于Entity Framework Core&lpar;Code First&rpar;创建MySQL数据库表

    创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表 创建数据模型类(POCO类) 在Models文件夹下添 ...

  2. Java-输入输出流

    JAVA-输入输出流 1.输入输出: 输入/输出(Input/Output)是指对某个设备或环境进行数据的输入或输出.任何语言都有输入输出的功能,在Java程序中,是通过流来完成输入和输出的,它通过J ...

  3. ASP&period;NET MVC的TempData(转载)

    本文章基于ASP.NET MVC Preview5. ASP.NET MVC的TempData用于传输一些临时的数据,例如在各个控制器Action间传递临时的数据或者给View传递一些临时的数据,相信 ...

  4. P132、面试题21:包含min函数的栈

    实现思路:们需要一个辅助栈.每次push一个新元素的时候,同时将最小元素(或最小元素的位置.考虑到栈元素的类型可能是复杂的数据结构,用最小元素的位置将能减少空间消耗)push到辅助栈中:每次pop一个 ...

  5. 在使用Fake framework的时候,为什么有一些函数没有生产mock呢?

    在使用Visual studio 2012 的Fake framework 做单元测试的时候,你会发现有一些函数没有生产Stub 或者 Shim的版本,这可能是由于Fake的一些限制导致的,但如何知道 ...

  6. (原)lua使用ffi调用c程序的函数

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5812763.html 参考网址: http://luajit.freelists.narkive.co ...

  7. 【DWM1000】 code 解密7一ANCHOR接收到BLINK

    接着之前ANCHOR的代码分析,但接收到无线数据,应该执行如下代码 case TA_RX_WAIT_DATA :   //already recive a message                ...

  8. swift4&period;0 对 afn 进行二次封装

    先将  afn 用pod导入到 工程中 创建一个类 ZHttpTools 继承自 AFHTTPSessionManager 一般我们不希望网络请求同时有多个存在,所以我们将这个工具类  设计成单例 代 ...

  9. ubuntu软件管理

    https://www.cnblogs.com/forward/archive/2012/01/10/2318483.html 一.Ubuntu中软件安装方法1.APT方式(联网安装, 需要联网下载软 ...

  10. time &amp&semi; datetime 模块

    在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime,calendar(很少用,不讲),下面分别来介绍. 在开始之前,首先要说明几点: 一 ...