在.NET Core中,中间件(Middleware)是处理HTTP请求和响应的核心组件,被组织成一个请求处理管道,每个中间件都可以在请求到达最终处理程序之前或之后执行操作。可以实现如身份验证、路由、日志记录、异常处理、静态文件服务等各种功能。
中间件是HTTP请求管道中的一个处理单元,负责处理传入的HTTP请求和返回的HTTP响应。每个中间件都有如下职责:
1.处理请求:对请求进行预处理(修改请求内容、验证身份等)。
2.决定是否继续传递请求:可以选择将请求传递给下一个中间件或者直接返回响应(短路请求管道)。
3.处理响应:可以在响应返回给客户端之前进行后处理(如添加响应头,记录日志等)。
中间件的工作原理
1.请求进入管道:
1.当一个HTTP请求进入应用程序时,它首先通过一系列的中间件组件。
2.每个中间件都有机会处理请求,并决定是否将请求传递给下一个中间件。
2.中间件的执行顺序:
1.按照添加的顺序依次执行
3.中间件的组成:
1.通常是一个委托或者是实现了IMiddleware接口的类
4.中间件的执行流程:
1.当请求进入中间件时,中间件可以选择处理请求并直接返回响应(短路请求管道),将请求传递给下一个中间件(调用next(context))
2.如果请求调用了next(context),那么请求将继续传递到下一个中间件
3.当请求通过所有中间件后,最终的处理程序将处理请求并生成响应
4.响应将按照相反的顺序通过中间件管道返回给客户端
常见的中间件及其工作原理
1.身份验证中间件(Authentication Middleware)
作用:用于处理用户身份验证。
工作原理:
1.在请求到达控制器之前,身份验证中间件会验证请求中是否包含有效的身份验证信息(如JWT令牌、Cookie等)
2.如果身份验证成功,中间件会将用户信息存储在HttpContext.User中
3.如果身份验证失败,重定向到登录页面或返回401未授权响应
示例:
public void Configure(IApplicationBuilder app)
{
app.UseAuthentication(); //启用身份验证
app.UseAuthorzation(); //启用授权
}
2.路由中间件(Routing Middleware)
3.静态文件中间件(Static Files Middleware)
4.异常处理中间件(Exception Handing Middleware)
5.日志记录中间件(logging Middleware)
自定义中间件
创建自定义中间件来处理特定的需求。自定义中间件通常时一个类,它包含一个Invoke或InvokeAsync方法,该方法接收HttpContext和一个RequestDelegate参数
示例:
1 public class MyMiddleware 2 { 3 private readonly RequestDelegate _next; 4 5 public MyMiddleware(RequestDelegate next) 6 { 7 _next = next; 8 } 9 10 public async task InvokeAsync(HttpContext context) 11 { 12 //在调用下一个中间件之前执行的操作 13 await context.Response.WriteAsync("MyMiddleware: Befor \n"); 14 15 //调用下一个中间件 16 await _next(context); 17 18 //在调用下一个中间件之后执行的操作 19 await context.Response.WriteAsync("MyMiddleware: Befor \n"); 20 } 21 }