Web开发:ABP框架12——中间件Middleware的创建和使用
一、简介
中间件可以用于鉴权、日志,拦截器可以用于指定方法或url的业务逻辑处理,两者分工不同,实现效果相似,先执行中间件,后执行拦截器,再到WebAPI接口。
二、示例
一个Token验证中间件
三、代码
1.Startup.cs
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 省略其余代码 // 注册 Token 校验中间件(示例) app.UseMiddleware(); // 省略其余代码 }
2.TokenValidationMiddleware.cs
public class TokenValidationMiddleware{ private readonly RequestDelegate _next; private readonly ILogger _logger; public TokenValidationMiddleware(RequestDelegate next, ILogger 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\"; }}