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();	  // 这个是通过扩张方法的方式
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值