Web开发:ABP框架12——中间件Middleware的创建和使用

发布于:2025-07-22 ⋅ 阅读:(10) ⋅ 点赞:(0)

一、简介

        中间件可以用于鉴权、日志,拦截器可以用于指定方法或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";
    }
}

 


网站公告

今日签到

点亮在社区的每一天
去签到