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等進行筆記總結。

     備註:我也是剛剛開始學習,參閱了不少前輩的文章,因此版權的歸你們全部,不歸本人全部,若是你喜歡本文的話,推薦共勉,謝謝!

相關文章
相關標籤/搜索