net core 3.1 中间件的使用
中间件是啥?
中间件是典型的AOP实现,你可以把请求处理模型想象成一个管道,一个请求过来,要在管道中过关斩将,通过执行,才会请求成功,而阻挡着请求进来的的软件或者说是逻辑,就是中间件来实现的。(不理解就没法子了)
下面来直接实现自定义中间件
public class CustomMiddle
{
private readonly RequestDelegate _next;
/// <summary>
/// 管道执行到该中间件时候下一个中间件的RequestDelegate请求委托,如果有其它参数,也同样通过注入的方式获得
/// </summary>
/// <param name="next"></param>
public CustomMiddle(RequestDelegate next)
{
_next = next;
}
/// <summary>
/// 自定义中间件要执行的逻辑
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public async Task Invoke(HttpContext context)
{
Console.WriteLine("CustomMiddle");
await _next(context);//把context传进去执行下一个中间件
Console.WriteLine("CustomMiddle");
}
}
三大块:
- 声明:RequestDelegate
- 注入 RequestDelegate(需要其他参数自行注入)
- Invoke 方法
必须要理解 参数是委托,返回值是委托的方法调用,然后把这个方法再传递给下一个返回值是委托,参数是委托的方法,之前写过类似俄罗斯套娃的实现,就是典型的中间件实现原理。
最后在startup中的configure
app.UseMiddleware<CustomMiddle>();
app.UseMiddleware<CustomMiddle1>();
app.UseMiddleware<CustomMiddle2>();
其他两个CustomMiddle1,CustomMiddle2,跟CustomMiddle,一模一样
执行顺序就是
CustomMiddle
CustomMiddle1
CustomMiddle2
CustomMiddle2
CustomMiddle1
CustomMiddle
或者还可以写成IApplicationBuilder的扩展方法和其他调用中间件保持一致写法