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

相关推荐
程序员爱钓鱼3 分钟前
Rust 切片 Slice 详解:安全访问连续数据
前端·后端·rust
咖啡八杯8 小时前
GoF设计模式——解释器模式
java·后端·spring·设计模式
掘金码甲哥8 小时前
这块终端神器, 必须吹爆!
后端
糖果店的幽灵8 小时前
【DeepAgents 从入门到精通】Context Management 上下文管理
java·人工智能·后端·spring·中间件·langgraph·deepagents
Csvn9 小时前
📊 SQL 入门 Day 8:集合操作 — 用 SQL 做数学里的"并交差"
后端·sql
码事漫谈12 小时前
告别数据孤岛与AI“水土不服”:金仓多模融合时序库如何让数据真正服务于业务
后端
IT_陈寒12 小时前
Redis的持久化配置把我坑惨了:你以为数据安全了?
前端·人工智能·后端
星栈12 小时前
Node 接口该写同步还是异步?
后端·node.js
红烧大青虫12 小时前
HarmonyOS应用开发实战:小事记 - UIAbility 的冷启动/热启动/后台启动三种场景与 launchParam 解析
后端·华为·harmonyos·鸿蒙系统
码事漫谈12 小时前
AI Token 缓存:命中省 10 倍,不命中白扔钱
后端