一、中间件的创建
中间件功能的本质是筛选器,请求管道的拦截处理。形式上体现为一个委托。当然委托的载体是一个类。
中间件的写法是固定的。
构造方法中应该传入委托链(下个中间件的委托)
private RequestDelegate _next; public TestMiddleware(RequestDelegate next) { _next = next; }
中间件注册后,会传入一个委托,这个委托就是next,传入进来后就是为了在执行完本次方法后,触发下个中间件的调用。
调用方法(本次以异步为例)
public async Task InvokeAsync(HttpContext context) { //需要进行的处理 await context.Response.WriteAsync("just a test!"); await _next.Invoke(context); }
使用中间件,在Startup.cs文件中调用中间件类
app.UseMiddleware<TestMiddleware>();
注意调用顺序。
二、中间价扩展注入方法
1、原生中间件app.Use();
一般试用于功能比较简单功能,不会主动短路请求管道,也不会主动调用下一个中间件,要借助await next.Invoke();
app.Use(next=> { return context=> { return context.Response.WriteAsync("just a test!!"); }; });
2、终止中间件app.Run(),会短路后续中间件。
app.Run(context =>{ return Task.CompletedTask; });
3、路径中间件
app.Map("/api",builder=> { builder.UseMiddleware<TestMiddleware>(); });
以api结束的调用路径,会访问此中间件,并且无法切回原来路径。
三、.net core原生中间件,可以在项目中Nueget获得