目录

一、目的

二、管道概述

三、相关实例

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

3.2 使用Use方法添加中间件

四、中间件类型

4.1 强类型中间件

4.2 基于约定的中间件

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的作用结合。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐