.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

 

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