WEB API 中HTTP 請求方式的四個主要方法 (GET, PUT, POST, DELETE)。Get一般用於查詢、Put一般用於更新,Post用戶創建,delete用戶刪除。我一般情況下使用Get和Post。查詢用Get,例如定義的一些GetByGUID、GetByUserName、Query等接口。其他的操作用Post,包括添加、刪除、更新記錄以及其他的一些服務器執行的操作等。甚至有些程序員全部都使用Post,也是可以的。不過Get只能傳簡單的參數,如果傳複雜的數據體進行查詢的話,需要把數據放到消息體內,還是要用Post纔行。
下面我們就以最簡單的User爲例子,實現用戶登錄、用戶查詢、基本信息修改、密碼修改、用戶刪除、頭像圖片上傳等操作。
WebAPI與客戶端之間傳輸的數據對象我們成爲數據實體對象,如果客戶端也是用C#開發的話,那可以直接使用這些視圖對象,比較方便。一般我會定義一個Entity工程,存放這些數據實體類。如果系統使用數據庫的話,一般一個實體類會對應數據庫中的一張表。
我們新建一個普通的.net類庫即可,刪除默認的Class1類文件,創建UserEntity.cs,文件中的代碼如下。
namespace WOBM.Learn.Entity; /// <summary> /// 用戶數據實體類 /// </summary> public class UserEntity { public string GUID { get; set; } = ""; /// <summary> /// 用戶名 /// </summary> public string UserName { get; set; } = ""; /// <summary> /// 密碼 /// </summary> public string Password { get; set; } = ""; /// <summary> /// 手機號 /// </summary> public string Tel { get; set; } = ""; /// <summary> /// 照片文件路徑 /// </summary> public string PhotoFilePath { get; set; } = ""; }
文件中定義了UserEntity類,該類包含GUID、UserName等屬性。WOBM.Learn.WebAPI工程引用該工程。
我們在WOBM.Learn.WebAPI工程的Controllers目錄下,創建UserController類,如下圖所示。
using Microsoft.AspNetCore.Mvc; namespace WOBM.Learn.WebAPI.Controllers { [Route("api/[controller]")] [ApiController] public class UserController : ControllerBase { } }
UserController類繼承了ControllerBase,下面我們添加登錄函數。添加後的代碼如下所示。
using Microsoft.AspNetCore.Mvc; using WOBM.Learn.Entity; namespace WOBM.Learn.WebAPI.Controllers { [Route("api/[controller]")] [ApiController] public class UserController : ControllerBase { /// <summary> /// 用戶登錄 /// </summary> /// <param name="pUserName">用戶名</param> /// <param name="pPassword">密碼</param> /// <returns></returns> [HttpGet] [Route("Logon")] public ActionResult<UserEntity> Logon(string pUserName, string pPassword) { var myUserName = pUserName.Trim(); var myPassword = pPassword.Trim(); if (myUserName.Length == 0 || myPassword.Length == 0) { return this.BadRequest("用戶名或密碼不能爲空。"); } if (myUserName != "admin" || pPassword != "123456") { return this.BadRequest("用戶名或密碼錯誤。"); } var myUserEntity = new UserEntity() { GUID=Guid.NewGuid().ToString (), UserName="admin" }; return this.Ok(myUserEntity); } } }
在命名的時候,一般函數名和路由,我會保持一致。返回的值統一爲ActionResult<T>,因爲這樣有正確的返回值或者錯誤信息,格式會比較統一。ControllerBase類提供了很多中返回ActionResult<T>的方法,例如NotFound、Content、NoContent、SignIn、SignOut等等。我一般常用的有兩個,BadRequest和Ok。
BadRequest是當接口出現異常信息的時候使用。例如我們平常寫函數,如果在UI上,可能會出現彈出MessageBox的情況或者Throw異常的情況。但在WebAPI中就不能拋出異常了,而是返回一個ActionResult對象,只是這個對象包含了異常或者錯誤信息。
Ok是指程序正確執行的時候,可以調用該函數,該函數可傳入一個返回對象,該對象被包在ActionResult中,返回到前端。
我們點擊運行,在瀏覽器中,可以看到添加的User/Logon接口,並且接口中使用的UserEntity類也被識別出來了。如下圖所示。