一、中间件是什么
我们都知道,任何的一个web框架都是把http请求封装成一个管道,每一次的请求都是经过管道的一系列操作,最终才会到达我们写的代码中。而中间件就是用于组成应用程序管道来处理请求和响应的组件。管道内的每一个组件都可以选择是否将请求转交给下一个组件,并在管道中调用下一个组件之前和之后执行某些操作。请求委托被用来建立请求管道,请求委托处理每一个HTTP请求。
中间件可以认为有两个基本的职责:
选择是否将请求传递给管道中的下一个中间件。
可以在管道中的下一个中间件前后执行一些工作
二.中间件示意图
添加中间件
下面模拟添加一个中间件
在Startup的Configure中添加
可以通过Use或者Run添加
或者
使用Use可以将请求传递给下一个中间件,可以使用await next();来传递,如果没有下一中间件时,则会报错,其实报错也是一个中间件,这才是最后的中间件
使用Run添加终端中间件,专门用来短路请求管道,放在最后每一个中间件都有权做出决定是否将请求传递给下一个中间件,也可以直接做出响应,促使管道短路短路就是指不再将请求继续往下传递,而是结束请求并开始响应
中间件是有顺序的
添加中间件的顺序就是请求调用这些中间件的顺序
请求和响应,方向相反,顺序也是相反的
看看执行顺序
三.自定义中间件
约定
1.具有类型RequestDelegate参数的公共构造函数
2.名为Invoke或者InvokeAsync的方法
3.必须返回Task
4.第一个参数必须为HttpContext
自定义中间件
添加中间件
添加扩展方法,模仿系统添加中间件过程
使用