.Net Web API 003 添加Controller实现用户登录
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类也被识别出来了。如下图所示。