【开发技术】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的作用结合。

相关推荐
杨充5 小时前
1.面向对象设计思想
后端
IT_陈寒5 小时前
Java的Date类又坑了我一次,改用时间戳真香
前端·人工智能·后端
systemPro5 小时前
2.6亿条设备数据,历史查询从超时到50ms,我做了什么
后端
要阿尔卑斯吗6 小时前
提示词优化启示:为什么“按顺序输出“比“关键度评分“更有效
后端
她的男孩6 小时前
后台接口加密别只会 HTTPS,ForgeAdmin 的 RSA + SM4/AES 源码拆解
后端·面试·开源
极光技术熊6 小时前
Spring AI 从入门到精通:构建你的 AI 开发知识体系
后端·github
程序员cxuan7 小时前
一句话,让你用上 GPT-5.6
人工智能·后端·程序员
远航_7 小时前
OpenSpec 完整详细介绍
前端·后端
AskHarries7 小时前
不用公网 IP,把 Windows 和 Linux 服务器放进同一个局域网:Tailscale 组网实战
后端
神奇小汤圆7 小时前
Java 的1 亿次对象创建:JVM 开启 / 关闭逃逸分析,GC 性能差距巨大
后端