asp.net core 中间件的写法

简单的写法:

// 使用匿名函数实现一个内联中间件
app.Run(async (context, next) =>
{
    // 做处理
    await next.Invoke();		// 调用下一个中间件
    // 做处理
});

这种方式只适用于小场景中使用;


目前常用的中间件写法(新建一个类的方式):

// 这个中间件主要是对请求过来的Header中的Token做处理
public class JwtTokenAuth
{
    // 中间件一定要有一个next,将管道可以正常的走下去
    private readonly RequestDelegate _next;
    public JwtTokenAuth(RequestDelegate next)
    {
        _next = next;
    }

    public Task Invoke(HttpContext httpContext)
    {

        //检测是否包含'Authorization'请求头
        if (!httpContext.Request.Headers.ContainsKey("Authorization"))
        {
            return _next(httpContext);
        }
        var tokenHeader = httpContext.Request.Headers["Authorization"].ToString().Replace("Bearer ", "");

        try
        {
            if (tokenHeader.Length >= 128)
            {
                TokenModelJwt tm = JwtHelper.SerializeJwt(tokenHeader);

                //授权 Claim 关键
                var claimList = new List<Claim>();
                var claim = new Claim(ClaimTypes.Role, tm.Role);
                claimList.Add(claim);
                var identity = new ClaimsIdentity(claimList);
                var principal = new ClaimsPrincipal(identity);
                httpContext.User = principal;
            }

        }
        catch (Exception e)
        {
            Console.WriteLine($"{DateTime.Now} middleware wrong:{e.Message}");
        }
        return _next(httpContext);
    }

}
// 这里定义一个中间件Helper,主要作用就是给当前模块的中间件取一个别名
public static class MiddlewareHelpers
{
    public static IApplicationBuilder UseJwtTokenAuth(this IApplicationBuilder app)
    {
        return app.UseMiddleware<JwtTokenAuth>();
    }
}

使用上面的中间件有两种方式:

app.UseMiddleware<JwtTokenAuth>();
// 或者:
app.UseJwtTokenAuth();	  // 这个是通过扩张方法的方式

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:技术工厂 设计师:CSDN官方博客 返回首页
评论

打赏作者

醉马踏千秋

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值