AspNetCore自定义中间件

中间件经常用定义好的,但是有的时候迫于业务需求必须自定义一些中间件,比如:

①当每次请求都需要token验证是否有效时可以在中间件直接拦截进行验证,而不是用过滤器,这样的话就不需要修改过多的代码也可以减少系统的开销;

②把某个请求加上响应的头部;(返回文件流时,拿不到文件名可以在响应头部加上文件名)

public class AddResponseHeaderMiddleware
    {private readonly RequestDelegate _next;
        public AddResponseHeaderMiddleware(RequestDelegate requestDelegate)
        {
            _next = requestDelegate;
        }
        public async Task InvokeAsync(HttpContext context)
        {
       //在请求头部添加信息
            if (context.Request.Path.Value.Contains("/ExportNewExcel"))
            {
                context.Response.Headers.Add("Title", $"{title}.xlsx");
            }
            if (context.Request.Path.Value.Contains("/token"))
            {
               var token= context.Request.Query["token"].ToString();
               //验证token
         //如果无效直接返回;
         //context.Response.StatusCode = 200;
         //context.Response.ContentType = "application/json; charset=utf-8";
         //await context.Response.WriteAsync(JsonConvert.SerializeObject(new { Status = 15, Msg = "没有权限操作" }));
            }
        //不做任何处理传递给下一个中间件
            await _next.Invoke(context);
        }
    }

注册中间件:

 app.UseMiddleware<AddResponseHeaderMiddleware>();

注意先后的顺序。

 

posted @ 2022-04-02 16:00  点终将连成线  阅读(114)  评论(0编辑  收藏  举报