Web开发:ABP框架12——中间件Middleware的创建和使用
一、简介
中间件可以用于鉴权、日志,拦截器可以用于指定方法或url的业务逻辑处理,两者分工不同,实现效果相似,先执行中间件,后执行拦截器,再到WebAPI接口。
二、示例
一个Token验证中间件
三、代码
1.Startup.cs
public void Configure(IApplicationBuilder app, IWebHostEnvironment env){// 省略其余代码// 注册 Token 校验中间件(示例)app.UseMiddleware<TokenValidationMiddleware>();// 省略其余代码}
2.TokenValidationMiddleware.cs
public class TokenValidationMiddleware
{private readonly RequestDelegate _next;private readonly ILogger<TokenValidationMiddleware> _logger;public TokenValidationMiddleware(RequestDelegate next, ILogger<TokenValidationMiddleware> logger){_next = next;_logger = logger;}public async Task InvokeAsync(HttpContext context){try{// 检查 URL 是否以 api/getbook 开头if (context.Request.Path.StartsWithSegments("/api/DemoService/GetCityData")){var token = context.Request.Headers["Authorization"].FirstOrDefault();if (string.IsNullOrEmpty(token) || !ValidateToken(token)){// 如果没有Token或Token无效,返回未授权错误context.Response.StatusCode = StatusCodes.Status401Unauthorized;await context.Response.WriteAsync("授权错误!");return;}}// 如果Token有效或路径不匹配,则继续执行下一个中间件await _next(context);}catch (System.Exception ex){_logger.LogError(ex.ToString());}}// Token 校验逻辑(仅示例)private bool ValidateToken(string token){return token == "123456";}
}