1. 程式人生 > >20181124_webAPI基礎01_建立一個基礎的WebAPI專案

20181124_webAPI基礎01_建立一個基礎的WebAPI專案

1. webApi屬於RESTful架構風格, 而RESTful風格, 是以資源為視角來描述服務的

2. 建立webAPI專案

3. 選擇webAPI, 然後mvc會自動引用

 

4. 點選確定, 就建立好一個WebAPI專案, 專案目錄如下:

 

5. 現在就可以嘗試訪問了:

6. 簡單介紹:

  a) 此時controller中有兩個預設的controller

 

  b) webAPI的訪問方式, 這裡返回的是xml, 而ie下返回的是 json; 這是由response的返回頭決定的, 可以f12看看返回頭的定義

 

7. 在瀏覽器輸入http://localhost:4071/api/values, 請求的過程是什麼?

 a) 一個網站啟動的時候, 第一個啟動的肯定是Global.asax檔案中的WebApiApplication下面的Application_Start()站啟動的時

 

  b)    路由註冊:

 

8. webAPI的運轉流程:

   1 啟動的時候:  Application_Start-→WebApiConfig.Register-→把路由規則寫入一個容器(routeTable)

      2 執行的時候: 請求會去容器匹配--找到第一個滿足的控制器--然後按照以下規則去找action(http method):

           a 優先查詢方法時候標記了特性 [HttpGet], 如果有標記, 則優先找引數最佳匹配的

           b 如果都沒有有標記[HttpGet]特性, 則找方法以Get開頭

           c (找方法時)優先引數最匹配  api/values/1--→Get(int id); 也就是說當請求過來的時候, 又能找到以[HttpGet]特性的方法, 又能找到以 Get開頭的方法, 那麼則使用引數做為最佳匹配

          d 如果沒有 [HttpGet] 特性, 也沒有以 Get開頭的方法, 則直接會報錯了

9. 基於WebAPI中的普通路由,訪問時帶來的兩個問題:

  a)    對一個資源(webAPI中所說的資源可以理解為一條資料)做同一種操作, 可能有多種方式; 比如根據使用者Id修改使用者密碼, 根據使用者Id修改使用者名稱稱, 根據使用者Id修改使用者郵箱

  b)   WebAPI中經常會有版本的問題, 比如在一個values控制器裡, 對某個方法進行升級, 表示v1版本, v2版本; 那麼如果只使用webAPI的預設路由來呼叫的話, 就不能區分了

       以上兩種問題, 只使用webAPI中的預設路由已經辦不到了, 所以webAPI又提供了一種特性路由

  c)   特性路由的寫法:

          1 在Global檔案的config.MapHttpAttributeRoutes()中寫;

          2 也可以直接在 控制器下的action上打特性路由標記, 比如    [Route("api/values")](下圖) ; 參考 ValuesController.cs 中的路由特性標記

10. 新增控制器:

  a)  右鍵Controllers目錄

 

b)  選擇一個控制器型別

 

c)   命名控制器

 

d) 等待完成

 

e)  完成