中间件
管道和中间件
-
管道:net框架用来封装请求的应用
-
中间件:
- (aop方式)一种装配到管道应用用来处理请求和响应的组件
- 中间件可以对管道里面的任何一个请求进行拦截,决定是否将请求转移到下一个中间件
- 中间件就是一个处理http请求和响应的组件,多个中间件构成了请求处理管道,每个中间件都可以选择处理结束,还是继续传递给管道中的下一个中间件,以此串联形成请求管道。通常,我们注册的每个中间件,每次请求和响应均会被调用,但也可以使用 Map , MapWhen ,UseWhen 等扩展方法对中间件进行过滤。
-
中间件注册到管道的三种方式
-
//1. 通过Use的方式注册中间件,可以控制是否将请求传递到下一个中间件; app.Use(async (context, next) => { await context.Response.WriteAsync("hello1"); // 管道短路 //await next.Invoke(); });
-
//2. 通过Run的方式注册中间件,一般用于断路或请求管道末尾,即不会将请求传递下去(让请求管道短路) app.Run(async (context) => { await context.Response.WriteAsync("hello2"); });
-
//3. 创建管道分支 //请求管道中增加分支,条件满足之后就由分支管道进行处理,而不会切换回主管道;Map用于请求路径匹配,而MapWhen可以有更多的条件进行过滤; app.Map("/map1", UseMiddleware1); app.Map("/map2", UseMiddleware2); app.Run(async (context) => { await context.Response.WriteAsync("hello END"); }); app.UseMiddleware<>()
-
.net fram管道和.netcore管道的区别
-
.net管道方式(全家桶式,不支持热拔插)
- 请求进入Asp.Net工作进程后,由进程创建HttpWorkRequest对象,封装此次请求有关的所有信息,然后进入HttpRuntime类进行进一步处理。
- HttpRuntime通过请求信息创建HttpContext上下文对象,此对象将贯穿整个管道,直到响应结束。同时创建或从应用程序池里初始化一个HttpApplication对象,由此对象开始处理之前注册的多个HttpModule。
- 调用HandlerFactory创建Handler处理程序,最终处理此次请求内容,生成响应返回。
- 在http请求的处理过程中,只能调用一个HttpHandler,但可以调用多个HttpModule
-
.net core(是由许多个中间件组成)
- 中间件就像一层一层的“滤网”,过滤所有的请求和相应。这一设计非常适用于“请求-响应”这样的场景——消息从管道头流入最后反向流出。
- ASP.NET Core MVC 和 Razor Pages 应用的完整请求处理管道,中间件顺序
- mvc终端路由中间件顺序
-
-
-
链接: