asp.net core 自定义中间件

asp.net core 自定义中间件

自定义中间件比较简单,分两步,构造函数与执行函数

  1. 首先中间件内部需要定义一个 RequestDelegate 的属性,表示下一个要执行的中间件;构造函数里面需要有一个RequestDelegate 参数,接收下一个中间件,另外需要其他注入的服务自己可以随意加
  2. 要有一个Invoke方法,用于执行,返回值需要是Task,参数需要HttpContext

比如一个权限中间件 定义:
首先定义构造函数:

//下一个要执行的中间件
 private RequestDelegate _next;
 //构造函数注入的方式,在IOC容器中获取服务
 private IConfiguration _configuration;
//如果需要其他服务,可以自己加
 public AuthorizationMiddleware(RequestDelegate next, IConfiguration configuration)
 {
     _next = next;
     _configuration = configuration;
 }

然后Invoke执行函数:

public Task Invoke(HttpContext context)
{
	//swagger都通过,不需要权限验证
   if (context.Request.Path.Value.StartsWith("/swagger"))
   {
       return _next?.Invoke(context);
   }
   
   if (context.Request.Headers.ContainsKey("loginWord"))
   {
       string data = context.Request.Headers["loginWord"][0];
       if (!_logins.Contains(data))
       {
       		//通过设置Response的StatusCode  与 Response.WriteAsync输出内容,结束这次请求
           context.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
           context.Response.WriteAsync("未授权");
       }
       else
       {
       		//顺利通过,进入下一个中间件
           return _next?.Invoke(context);
       }
   }
   else
   {
       context.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
       context.Response.WriteAsync("未授权,请添加loginWord验证");
   }
   return Task.CompletedTask;
}

最后可以写一个扩展方法,与其他中间价保持一致

public static class AuthorizationMiddlewareExtensions
{
     /// <summary>
     /// 使用自定义的鉴权中间件
     /// </summary>
     /// <param name="app"></param>
     /// <returns></returns>
     public static IApplicationBuilder UseCustomAuthorization(this IApplicationBuilder app)
     {
     	//这样在startup.configure方法中直接用app.UseCustomAuthorization();就可以了
     	//如果不写这个扩展方法就把下面这句直接放在startup.configure方法中就可以了
         return app.UseMiddleware<AuthorizationMiddleware>();
     }
 }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值