.Net Web API 003 添加Controller實現用戶登錄

1、Get和Post

WEB API 中HTTP 請求方式的四個主要方法 (GET, PUT, POST, DELETE)。Get一般用於查詢、Put一般用於更新,Post用戶創建,delete用戶刪除。我一般情況下使用Get和Post。查詢用Get,例如定義的一些GetByGUID、GetByUserName、Query等接口。其他的操作用Post,包括添加、刪除、更新記錄以及其他的一些服務器執行的操作等。甚至有些程序員全部都使用Post,也是可以的。不過Get只能傳簡單的參數,如果傳複雜的數據體進行查詢的話,需要把數據放到消息體內,還是要用Post纔行。

下面我們就以最簡單的User爲例子,實現用戶登錄、用戶查詢、基本信息修改、密碼修改、用戶刪除、頭像圖片上傳等操作。

2、數據實體對象

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工程引用該工程。

3、UserController實現用戶登錄

我們在WOBM.Learn.WebAPI工程的Controllers目錄下,創建UserController類,如下圖所示。

截圖.png

添加後,默認代碼如下所示。

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類也被識別出來了。如下圖所示。

截圖.png

點擊該接口測試,輸入錯誤的用戶名和密碼,效果如下圖所示。

截圖.png

當輸入正確的用戶名和密碼,返回的消息如下圖所示。

截圖.png

直接在瀏覽器中測試,如下圖所示。

截圖.png

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章