.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类,如下图所示。

添加后,默认代码如下所示。
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类也被识别出来了。如下图所示。

点击该接口测试,输入错误的用户名和密码,效果如下图所示。

当输入正确的用户名和密码,返回的消息如下图所示。

直接在浏览器中测试,如下图所示。

.Net Web API 003 添加Controller实现用户登录的更多相关文章
- WEB安全系列之如何挖掘任意用户登录漏洞
WEB安全系列之如何挖掘任意用户登录漏洞 0x01 前言 每周两篇文章打卡.坏蛋100块钱都不给我,好坏好坏的. 0x02 什么是任意用户登录漏洞 几乎每个网站都有自己的会员系统 ...
- Web API 2 添加Models and Controllers Part 2.
在方案中找到Models文件夹,右键添加类,命名为Author. Author.cs 替换以下代码 C# using System.Collections.Generic; using System. ...
- ASP.NET Web API 框架研究 Controller创建 HttpController介绍
对请求进行路由解析以及消息处理管道进行处理后,最后可以从HttpRequestMessage对象的属性字典中获取解析的路由数据,后边我们就可以根据其进行HttpController的创建,从前边几篇可 ...
- ASP.NET Web API中的Controller
虽然通过Visual Studio向导在ASP.NET Web API项目中创建的 Controller类型默认派生与抽象类型ApiController,但是ASP.NET Web API框架本身只要 ...
- ASP.NET Web API 框架研究 Controller实例的销毁
我们知道项目中创建的Controller,如ProductController都继承自ApiController抽象类,其又实现了接口IDisposable,所以,框架中自动调用Dispose方法来释 ...
- 动态添加数据源,根据用户登录切换数据库.编程式Spring事务.
根据用户注册,系统自动创建私有数据库,用户登录,动态添加数据源到Spring数据路由,Session超时删除数据源 好处:当数据量大的时候,类似水平切割效果,效率会高一些 坏处:数据源切换,Sprin ...
- 黄聪:保持web页面生成的app一直处于用户登录状态不退出
用户登录了会员中心,怎么保持登录状态! 由于封壳的内核及组件肯定没有浏览器APP应用那么强大,所以目前暂时的解决方案是: jquery.cookie.js 本文转载至:https://www.cnb ...
- 【Web API]无法添加AttributeRoutes的解决方案
1.按照微软官方文档,如果要使用AttributeRoutes,需要在APP_START里的WebApiConfig.cs的Register方法中添加一行:config.MapHttpAttribut ...
- ASP.NET Web API 框架研究 Controller创建 HttpController 类型解析 选择 创建
上一篇介绍了HttpController的一些细节,接下来说下HttpController 类型解析.选择和创建.生产HttpController实例的生产线如下图: 一.涉及的类及源码分析 涉及的类 ...
- ASP.NET Web API 框架研究 Controller创建过程与消息处理管道
现在我们从代码角度来看下,从消息处理管道末尾是怎么创建出Controller实例的.消息处理管道末端是一个叫HttpRoutingDispatcher的处理器,其内部完成路由后 ,会把消息派送给其内部 ...
随机推荐
- Centos7 虚拟机挂载未分配的空间
客户给分配了一台虚拟机,系统安装是Centos7系统,空间为80G,df -h 命令查看系统后发现只有40G左右的空间可用,剩余空间未分配.下面记录主要过程: 查看当前已分配的空间 df -h [ro ...
- MySQL 的 JSON 查询
MySQL 的 JSON 路径格式 MySQL 使用特定的 JSON 路径表达式语法来导航和提取 JSON 文档中的数据 基本结构 MySQL 中的 JSON 路径遵循以下通用格式 $[路径组件] 路 ...
- unigui显示uniTreeVview使用TUniTreeNode内存泄漏的问题【14】
uniTreeVviewc创建一个tree,显示患者姓名(PatientName).因为需要用到患者ID(PatientID),所以使用help: TPatientTreeNode = class(T ...
- LazyAdmin打靶笔记
参考视频:https://www.bilibili.com/video/BV16Tc8eCEKZ/?spm_id_from=333.1387.homepage.video_card.click Nma ...
- “你觉得客户需要”是杀死TA的最后一根稻草 | IPD集成产品开发
这个米老鼠洗衣机,大家眼熟吗? 相信最近热衷于在网上冲浪的朋友们,对这款形似米老鼠的"懒人洗衣机"并不陌生,甚至算是小小地参与了一下这个产品研发项目.在海尔的周云杰总裁爆火出圈后, ...
- jmeter使用之数据关联
- github项目收集
web模块 Nginx 监控模块vts: https://github.com/vozlt/nginx-module-vts
- 网鼎杯-phpweb
找了一些php读取文件的函数尝试读取源码,试了一个readfile就成功了 <?php $disable_fun = array("exec","shell_exe ...
- Java编程--String类和基本数据类型的相互转换
基本数据类型:byte.short.int.long.char.float.double.boolean 基本数据类型->String:利用String类提供的ValueOf(基本类型)方法转换 ...
- IO流-转换流、序列化流--java进阶day14
1.转换流 转换流本质还是字符流的子类 转换流的作用 1.可以按照指定的编码进行读写操作 我们使用的IO流,默认格式都是UTF-8,如果一个文件是GBK格式,在读写的时候就会乱码,此时就可以使用转换流 ...