【开发技术】Asp.NetCore的管道和中间件

目录

一、目的

二、管道概述

三、相关实例

[3.1 管道,使用Run来创建中间件](#3.1 管道,使用Run来创建中间件)

[3.2 使用Use方法添加中间件](#3.2 使用Use方法添加中间件)

四、中间件类型

[4.1 强类型中间件](#4.1 强类型中间件)

[4.2 基于约定的中间件](#4.2 基于约定的中间件)

[4.3 中间件的依赖注入注册](#4.3 中间件的依赖注入注册)

五、文章总结


一、目的

很早以前学习Framework下管道时,记录过自己的理解,在Framework下的管道,类似于Web Services的一种在服务器端处理ASP.NET页面的框架技术,通过HttpHandle和HttpModule来处理请求。后来看.NetCore下的管道和中间件,管道更像一个容器,通过容器中的各种中间件,来处理各种Request请求;这里主要记录下对于Asp.NetCore下的管道和中间件的理解。

二、管道概述

管道是Asp.NetCore的核心。自身是一个长时间运行的后台服务(Web主机服务)。服务运行后才会构建请求管道。管道会绑定到Kestrel来监听请求。Http请求一旦获取,会标准成Http上下文对象,发送给管道。实际处理的就是管道中的各种组件,也就是管道中间件。每个中间件都有特定的功能。

例如:路由、认证、授权等中间件。

MVC就是建立在路由中间件的基础上,该中间件实现了请求和Action之间的映射,并激活控制器、执行动作、渲染视图;

Http请求消息和返回消息,都是一个.Net中的请求上下文HttpContext。

管道的本质是一个Fun类型的委托集合。参数是请求委托,返回也是一个请求委托RequestDelegate(Httpcontext),参数是Httpcontext;

三、相关实例

3.1 管道,使用Run来创建中间件

webhost主机中的Configure就是用来配置管道。管道中的Run方法只是用来接收处理委托,只有请求不会返回,就是终结点中间件,不会向下传递。Host.Run才是运行主机。

3.2 使用Use方法添加中间件

委托可以根据功能需要,自身来判断是否需要往下执行,避免冗余处理。

四、中间件类型

中间件有强类型和基于约定的中间件;

强类型:通过实现中间件的接口和实现方法;

基于约定:不需要实现接口,只需要按照相关形式和预定实现即可。

4.1 强类型中间件

实现IMiddleware接口和方法;

通过依赖注入的方式使用:

可以是瞬时和单例等;

一定要现在依赖注入服务中进行注册,然后在配置管道中添加中间件;

4.2 基于约定的中间件

ps:必需要有效的公共构造函数(RequestDelegate),

必须有一个:Task Invoke(Httprequest,...)

配置约定方式的中间件,不需要注册依赖注入服务,直接在管道中添加即可;还可以传递参数

4.3 中间件的依赖注入注册

需要在使用中间件之前,注册相关服务;一般在使用管道前,相关服务都会注册完毕;

五、文章总结

整个管道处理,是先进后出原则。一个请求过来类似穿过了一个洋葱壳,一个层一层的就是管道,一个管道包一个管道。最先碰到的,穿过后会最后出来。中间件的模式,方便了对Http请求进行自由扩展,新增多少处理中间件,则请求过来经过多少处理流程。通过中间件模式来处理http请求,进行过滤处理,类似httpModule和httphandler的作用结合。

相关推荐
打工仔折腾 AI7 小时前
用 Shell 脚本自动部署 mysqld_exporter 并接入 Prometheus 远程抓取
人工智能·后端·python·性能优化·ai agent 实战
毅炼7 小时前
不写多语言 SDK,怎么让 Python、Go、Node 服务接入注册中心?
java·后端·系统架构·gateway
Methy7 小时前
IoTHub半个月崩了五次?都是裸rethrow惹的祸
服务器·c++·后端
我不会起名字3227 小时前
一天一道力扣Hot100(36):深度优先算法---组合总和
数据结构·c++·后端·python·算法·go
回家路上绕了弯7 小时前
AI 编程助手为什么反复读取同一份上下文?如何减少无效重复
后端
Lost of 程序猿8 小时前
用 Quartz.NET 优雅地处理 .NET 定时任务:从选型到 Docker 部署全记录
后端·c#·asp.net
名字还没想好☜8 小时前
Spring Boot 优雅停机实战:等在途请求处理完再退出,配合 K8s preStop 别丢请求
java·后端·spring
摇滚侠8 小时前
《Spring Boot 3:高级与架构设计》第 1 章 Bean 与 BeanDefinition 个人理解 2
java·spring boot·笔记·后端
IT_陈寒8 小时前
Redis主从切换竟让业务卡了3秒?这个坑我替你踩了
前端·人工智能·后端
右耳朵猫AI9 小时前
Java周刊2026W38 | Micronaut 修补三漏洞、JDK 27 提速 54%、Jetty 修复抖动测试
java·后端·spring