广义上来讲:Tomcat、WebLogic、Redis、IIS都是中间件;
狭义上来讲,也就是基于.NET CORE技术本身来说,中间件指的是ASP.NET Core中的一个组件。
中间件是ASP.NET Core的核心组件,MVC框架、响应缓存,身份验证、Cors、Swagger等都是内置中间件。
中间件由前逻辑,next,后逻辑3部分组成,前逻辑为第一段要执行的逻辑代码,next为指向下一个中间件的调用,后逻辑为从一个中间件执行返回所执行的逻辑代码。
每个HTTP请求都要经历一系列中间件的处理,每个中间件对于请求进行特定的处理后,再转到下一个中间件,最终的业务逻辑代码执行完成后,响应的内容也回按照处理的相反顺序进行处理,然后形成HTTP响应报文返回给客户端。
中间件组成一个管道,整个ASP.NET Core的执行过程就是HTTP请求和响应按照中间件组装的顺序在中间件之间流转的过程。开发人员可以对组成管道的中间件按照需要进行自由组合。
0
中间件的三个概念
Map、Use和Run。Map用来定义一个管道可以处理哪些请求,Use和Run用来定义管道,一个管道由若干个Use和Run组成,每个Use引入一个中间件,而Run是用来执行最终的核心应用逻辑。
 
0
0
这里边需要注意几点:
  1. use本身是从上到下执行的,所以需要注意顺序,有的需要考虑先后
  2. run之后的,不会被执行
下边的例子更容易理解,中间件的三要素,也就是Map引流,use引入中间件,run执行核心逻辑。
0
这个例子并不符合框架的规范,一般要求只有一个中间件,并且一般为最后一个中间件来输出内容,其他中间件不要输出内容,一旦中间的中间件输出内容,那么就返回,不要再做next.Invoke(),避免造成Http响应报文的混乱。
自定义中间件
  1. 如果中间件的代码比较复杂,或者我们需要重复使用一个中间件的话,我们最好把中间件的代码放到一个单独的中间件类中
  2. 中间件类是要给普通的.net类,它不需要继承任何父类或者实现任何接口,但是这个类需要有一个构造方法,构造方法至少要有一个RequestDelegate类型的参数,这个参数用来指向下一个中间件。这个类还需要定义一个名字为Invoke或InvokeAsync的方法,方法至少有一个HttpContext类型的参数,方法的返回值必须是Task类型。中间件类的构造方法和Invoke(或InvokeAsync)方法还可以定义其他参数,其他参数的值会通过依赖关系注入自动赋值。
0
书写完成中间件类之后,再program.cs文件中用app.UseMiddleware<>() 来引入中间件。
0
中间件和Filter的区别
中间件是ASN.NET Core这个基础提供的功能,而Filter是ASP.NET Core MVC中提供的功能。ASP.NET Core MVC 是MVC中间件提供的框架,而Filter属于MVC中间件提供的功能。
0
  1. 中间件可以处理所有请求,而Filter只能处理对控制器的请求;中间件运行再一个更底层,更抽象的界别,因此再中间件中无法处理MVC中间件特有的概念。
  2. 中间件和Filter可以完成很多相似的功能。比如:“未处理异常中间件”和“未处理异常Filter”;“请求限流中间件”和“请求限流Filter”。
  3. 优先选择使用中间件;但是如果这个组件只针对MVC或者需要调用一些MVC相关的类的时候,我们只能选择Filter。
posted on 2023-05-16 12:08  CRUDEngineer  阅读(493)  评论(0编辑  收藏  举报