用一个简单的例子教你如何 自定义ASP.NET Core 中间件(二)

上一章已经说过了,中间件是一种装配到应用管道以处理请求和响应的软件。 每个组件:

  • 选择是否将请求传递到管道中的下一个组件。
  • 可在管道中的下一个组件前后执行工作。
  • 请求委托用于生成请求管道。 请求委托处理每个 HTTP 请求。

一句话总结:中间件是比筛选器更底层,更上游的面向切面技术,其性能最高,可处理的应用范围远比过滤器广,如实现网关,URL 转发,限流等等。

下面用一个简单例子来说明如何自定义一个中间件:

新建一个类:MyMiddleware

    public class MyMiddleware
    {
        private ILogger<MyMiddleware> logger;//日志记录类
        private readonly RequestDelegate _next;//请求委托:用于生成请求管道

        public MyMiddleware(ILogger<MyMiddleware> logger, RequestDelegate next)
        {
            this.logger = logger;
            _next = next;
        }

        public Task InvokeAsync(HttpContext context)
        {
            //给请求添加一个自定义头字段
            context.Request.Headers["lwpoor"] = "123";
            logger.LogInformation($"这是{nameof(MyMiddleware)}中间件");
            string headers = "\n--------------headers------------\n";
            foreach (var header in context.Request.Headers)
            {
                headers+=header.Key + "=" + header.Value + "\n";
            }
            headers += "--------------------------------";
            logger.LogInformation(headers);

            // 调用下一个中间件
            return _next(context);
        }
    }

写一个扩展方法,将中间件暴露出去:

新建一个静态类:MyMiddlewareExtensions

    /// <summary>
    /// 扩展方法,将中间件暴露出去
    /// </summary>
    public static class MyMiddlewareExtensions
    {
        /// <summary>
        /// 测试中间件
        /// </summary>
        /// <param name="builder"></param>
        /// <returns></returns>
        public static IApplicationBuilder UseLwpoor(this IApplicationBuilder builder)
        {
            return builder.UseMiddleware<MyMiddleware>();
        }
    }

最后一步注册中间件:

app.UseLwpoor();//注册中间件

这样就自己定义了一个简单的中间件,运行程序看一下:

 需要注意的地方:

自定义中间件必须要实现 InvokeAsync 公共方法,参数必须保持一致,它是中间件执行的入口

如果没有实现 InvokeAsync 方法运行会报错:“找不到'Hero.Jwt.MyMyMiddleware'类型的中间件的公共'Invoke'或'InvokeAsync'方法

必须要在构造函数里面申明请求委托 RequestDelegate ,用于生成请求管道:

并且在完成后 return _next(context) 调用下一个中间件

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YuanlongWang

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值