天天看點

使用ASP.NET Web Api建構基于REST風格的服務實戰系列教程【五】——在Web Api中實作Http方法(Put,Post,Delete)

前言

在Web Api中,我們對資源的CRUD操作都是通過相應的Http方法來實作——Post(新增),Put(修改),Delete(删除),Get(查詢)。查詢在前幾章我們已經實作了,本章就在我們的案列(CourseController)中實作put,post和delete方法。

使用Http Post方法建立一個Course

首先,在“CourseController”中建立Post(CourseModel courseModel)方法,具體代碼如下:

上面的代碼主要做了以下的事:

1.方法名為Post是以用戶端發起的Http請求必須也是Post

2.方法接受一個CourseModel類型的參數,對于複雜類型的參數Web Api會從Http請求的Body部分反序列化出來,是以用戶端必須發送一個代表CourseModel類型的對象參數(我覺得就是一些Key Value鍵值對——key對應CourseModel的屬性名,Value就是屬性值)

3.對于新增操作,我們在操作成功之後傳回201(資源建立)的同時,把 新建立的資源傳回也是必要的,因為這個這個資源包含了一個在伺服器端自動生成的Id。

4.我們在ModelFactory中新增了一個Parse方法用來将我們的CourseModel轉化為domain model(“Course”),這個方法代碼就不貼了,在本章代碼中給出。

使用ASP.NET Web Api建構基于REST風格的服務實戰系列教程【五】——在Web Api中實作Http方法(Put,Post,Delete)

解釋下這個請求:

1.設定header部分“content-type”屬性為“application/json”因為我們發送的資料格式是JSON格式。

2.設定header部分“accept”屬性為“application/json”因為我們希望接受的資料格式也是JSON格式。

如果這個post請求執行成功,那麼一個新的Course即被建立,我們接受到的響應封包應該如下圖所示:

使用ASP.NET Web Api建構基于REST風格的服務實戰系列教程【五】——在Web Api中實作Http方法(Put,Post,Delete)

使用Http Put方法更新一個Course

在“CourseController”中建立Put(int Id CourseModel courseModel)方法,具體代碼如下:

解釋一下上面的代碼:

1.方法名為Put,是以需要用戶端發送put請求,但是在我們的方法上打了Patch特性,那就說明put和patch請求都将執行這個方法。對于put和patch請求的差別在于——當我們需要更新CourseModel所有字段時用“put”,隻更新部分字段時用“Patch”,但在我們的put方法中無需區分這2者。

2.在我們的put方法中需要接受2個參數(Id和CourseModel),Id是包含在URL中,而CourseModel則應該在請求的Body中。

3.對于更新成功我們傳回200狀态碼和更新過的Course,沒成功傳回304(Not Modified)。

使用ASP.NET Web Api建構基于REST風格的服務實戰系列教程【五】——在Web Api中實作Http方法(Put,Post,Delete)

3.請求的Body部分是一個以JSON格式序列化且需要更新的“CourseModel“。

如果put方法執行成功,那麼我們會獲得200的響應狀态碼以及更新過的Course。

使用Http Delete方法删除一個Course

在“CourseController”中建立Delete(int Id )方法,具體代碼如下:

解釋一下上面代碼:

1.方法名為delete,是以對應的http請求應該是delete。

2.方法接收一個參數Id,而Id應該在URL中設定,是以請求正文的内容為空。

3.如果删除成功,我們傳回200狀态碼,删除失敗時傳回400(BadRequest)的同時把錯誤内容也傳回給用戶端

使用ASP.NET Web Api建構基于REST風格的服務實戰系列教程【五】——在Web Api中實作Http方法(Put,Post,Delete)

在項目中添加StudentController

studentController用于對Students實作CRUD,主要涉及以下功能:

1.使用Get請求擷取所有學生資訊。

2.發送Get請求擷取單個學生資訊(注:在這裡我們将UserName作為參數傳遞到伺服器,這個方法是基于Basic authentication,是以隻有提供使用者名的密碼才能查詢到相應的資訊,在講Web Api安全性的時候我們着重來說這裡)。

3.通過Post請求新增一個學生。

4.通過Put或Patch請求修改一個學生。

5.通過Delete删除一個學生。

這裡就不給出StudentController中的詳細代碼了,和CourseController中的基本相似,大家可以在本章最後給的代碼連結中獲得,這裡列舉一下在WebApiConfig中添加的路由代碼:

總結

到此為止,我們已經将Http方法所對應操作資源的CRUD介紹完了,下一章我們将介紹資源間的關聯,敬請期待。