一:声明中间件类
简单步骤介绍:
1.声明一个中间件验证权限的辅助类
2.声明一个 RequestDelegate http协议委托
3.声明该类的有参(RequestDelegate)构造函数
4.声明权限验证方法Invoke(HttpContext)
代码演示如下:
using ReadJson_.Net6._0.Model;
using System.IdentityModel.Tokens.Jwt;
namespace ReadJson_.Net6._0.Utils
{
/// <summary>
/// 中间件辅助类
/// </summary>
public class MiddleWareUtil
{
/// <summary>
/// 前端接口访问路由 Http协议
/// </summary>
private readonly RequestDelegate _next;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="next"></param>
public MiddleWareUtil(RequestDelegate next)
{
_next = next;
}
/// <summary>
/// 验证前端访问接口,用户状态是否是 在线
/// 是: 继续访问接口
/// 不是: 提示前端去登录
/// </summary>
/// <param name="context"></param>
public async Task Invoke(HttpContext context)
{
//获取上传token,可自定义扩展
string token = context.Request.Headers["Authorization"].ToString();
if (!string.IsNullOrEmpty(token))
{
//在此处写验证逻辑
//我的代码是前端传过来的参数token是经过jwt加密的,所以需要解密
//大家可以根据自己的需求,进行相应的更改
//解析jwt加密的 token
TokenModelJwt tmj = JwtUtil.SerializeJwt(token);
//取出token中的用户id
string userId = tmj.Uid;
//根据id查询学生信息
//此处先创建一个假数据 代表查询出来的数据
Student student = new Student()
{
Id = userId,
state = "在线"
};
if (student.state == "在线")
{//验证成功 继续访问需要访问的接口
await _next(context);
return;
}
}
//验证失败 返回报错
await _next(null);
}
}
}
二: 注册消息中间件
注意:
.Net6.0以上项目请在Program.cs中写注册代码: app.UseMiddleware<自己定义的中间件实体类名称>();
.Net6.0以下项目请在Startup.cs中写注册代码: app.UseMiddleware<自己定义的中间件实体类名称>();
具体代码如下
三:简单使用
如下两图: 首先我是没有传递token信息的,他会报错,不会访问成功
如下两图:我是传递了token信息的,所以他会访问成功,就能正常访问接口并且能拿到数据
以上就是我自己会的一些简单的中间件相关的技术了解,大家有更加丰富的想法,欢迎到评论区留言讨论!!!