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

2023-12-19

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

  • 选择是否将请求传递到管道中的下一个组件。
  • 可在管道中的下一个组件前后执行工作。
  • 请求委托用于生成请求管道。 请求委托处理每个 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) 调用下一个中间件

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • Netty火热平时却接触不多?1515页Netty学习进阶笔记真香

    Netty 的介绍 Netty 是由 JBOSS 提供的一个 Java 开源框架 现为 Github 上的独立项目 Netty 是一个异步的 基于事件驱动的网络应用框架 用以快速开发高性能 高可靠性的网络IO 程序 Netty 是一个异步的
  • vscode 内置(自带)功能使用

    vscode 搜索 功能 使用正则表达式 参考文章 Justice23 参考文章 熟悉的新风景 转义字符 匹配内容 t tab r 回车符号 r n 换行符号 n 特殊符号转义 如
  • JMeter —— 如何循环使用接口返回的多个值!

    在用JMeter做接口测试的时候 经常会遇到这样一种情况 一个接口请求返回了多个值 然后下一个接口想循环使用前一个接口的返回值 第二种情况 只想循环请求前一个接口返回值中的随机不定长度的某一些值 并不想用全部的 今天 我就和大家讲解一下这两
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证

    public Task InvokeAsync HttpContext context 获取终点路由特性 var endpointFeature context Features Get
  • Web自动化测试流程:从入门到精通,帮你成为测试专家

    摘要 Web应用程序在今天的软件开发中占据着越来越重要的地位 保证Web应用程序的质量和稳定性是非常必要的 而自动化测试是一种有效的方法 本文将介绍Web自动化测试流程 并提供代码示例 步骤一 选取测试工具 选择适合自己团队的自动化测试工具
  • 滚动条样式

    webkit scrollbar 滚动条整体样式 width 10px 高宽分别对应横竖滚动条的尺寸 height 10px webkit scrollbar thumb 滚动条里面小方块 border radius 10px box sh
  • 使用DTS将自建MySQL迁移至PolarDB MySQL引擎,探索DTS全量数据校验

    1 领取免费的ECS和PolarDB资源 一旦您注册了阿里云账号并填写了您的账号和支付信息 您就可以申请免费试用我们的产品 如ECS PolarDB RDS等服务 1 1 申请 ECS 免费试用 1 在 阿里云免费试用中心 找到ECS 单击
  • .NET Core中鉴权 Authentication Authorization

    Authentication 鉴定身份信息 例如用户有没有登录 用户基本信息 Authorization 判定用户有没有权限 使用框架提供的Cookie鉴权方式 1 首先在服务容器注入鉴权服务和Cookie服务支持 services Add
  • 【S025】SpringBoot OA办公管理系统项目源码 办公自动化

    项目标题 SpringBoot OA办公管理系统项目源码 Java毕业设计 项目编号 S025 功能介绍 OA办公自动化系统 使用Maven进行项目管理 基于springboot框架开发的项目 mysql底层数据库 前端采用freemark
  • 如何学好信息安全?大学信息安全专业研发技能表-成为信息安全专业优秀人才

    网络空间安全 信息安全 的重要性这几年被提升到前所未有的高度 国家更是高度重视 并且特批成立了网络空间安全一级学科 各大高校积极申报博士点 硕士点 开设信息安全专业的高校越来越多 那么 对于信息安全专业的大一新生如何学好 可能很多同学都在迷
  • CODESYS的Robotics_PickAndPlace_without_Depictor例程解释

    1 简介 在CODESYS的例程中 有一个例程演示了如何控制delta机械手从一个移动的转盘中拾取一个工件 ring 圆环 然后放到移动的传送带上的托盘 cone 圆锥 中 这个例程在 C Program Files x86 CODESYS
  • 深度学习14—注意力机制与自注意力机制

    注 以下均为个人学习笔记 发布只为方便学习阅读 若觉侵权 请联系删除 1 李沐老师课堂学习理解笔记 1 1 随意线索和不随意线索 1 2 注意力机制 通过注意力池化层来有偏向性的选择某些输入 1 3 注意力池化层 1 3 1 非参数化注意力
  • 手写识别软件哪个好?来试试下面这几款吧

    听说你对手写文字识别软件很感兴趣啊 你就是那个总是在笔记本上写密密麻麻的字 然后又懒得一个个去打字的家伙吧 别担心 这个世界已经听到你的呼唤 手写文字识别技术就是为了解放你的双手费尽心思开发的 现在 让我来告诉你手写文字识别最简单的方法有哪
  • 基于SpringBoot的房屋租赁系统 附源码

    基于SpringBoot的房屋租赁系统 附源码 文章目录 基于SpringBoot的房屋租赁系统 附源码 一 引言 二 系统设计 三 技术架构 四 功能实现 五 界面展示 六 源码获取 一 引言 本文介绍了一个基于SpringBo
  • 【转载】【Unity】WebSocket通信

    1 前言 Unity客户端常用的与服务器通信的方式有socket http webSocket 本文主要实现一个简单的WebSocket通信案例 包含客户端 服务器 实现了两端的通信以及客户端向服务器发送关闭连接请求的功能 实现上没有使用U
  • Qt Quick 工程创建

    一 简介 Qt Quick是Qt框架中的一个模块 用于创建现代 响应式的用户界面 它基于QML Qt Meta Object Language 语言和Qt Quick Controls库 提供了一种声明性的方式来构建用户界面 Qt Quic
  • [APM32F4]基于APM32F411控制的一个软开关电路设计分享

    1 前言 说明 本文介绍的软开关电路 并不是 开关电源 里面的软开关概念 而是系统供电的开关 结合MCU等控制芯片 控制系统供电的开启或关断 在某些电子产品的场合 我们经常会需要用到按键长按进行开机 然后按键长按进行关机 或者按键长按之后有
  • 图像配准 CVPRW21 - 深度特征匹配 DFM

    本文转自 图像配准 CVPRW21 深度特征匹配 DFM 深度学习图像配准 CSDN博客 github地址 https github com ufukefe DFM 相识 图像配准 Image Registration 是计算机视觉领域中的
  • 性能测试:如何使用window系统资源监控!

    系统资源监控通常分为两类系统 window和类unix unix linux aix window系统资源监控 window系统资源监控有两种方法 一是使用loadrunner工具进行监控 二是使用windows自带的性能工具perfmon
  • 用一个简单的例子教你如何 自定义ASP.NET Core 中间件(二)

    上一章已经说过了 中间件是一种装配到应用管道以处理请求和响应的软件 每个组件 选择是否将请求传递到管道中的下一个组件 可在管道中的下一个组件前后执行工作 请求委托用于生成请求管道 请求委托处理每个 HTTP 请求 一句话总结 中间件是比筛选