.Net Core全面解析2_管道模型,中间件,核心 Startup.Configure解析

1.asp.net core 实际是一个控制台应用程序 。请求管道模型

执行顺序就是:发送http请求>被Kestrel解析得到HttpContext->然后被后台代码处理Request>返回Response->经由Kestrel回发到客户端
所谓管道,就是拿着HttpContext,经过多个步骤的加工,生成Response,而这其实就是管道模型请求

所以Startup.Configure就是指定我们的代码如何去处理请求

这个Startup.Configure方法,叫请求级(所有请求生效,且只执行一次其实也就是初始化)----而页面级就是 请求一个页面Home/Index

2.Startup.Configure中间件 方法源码解析

 Configure的核心其实就是IApplicationBuilder app这个参数

 而里面需要实现的就是build方法:它的注释:构建此应用程序用来处理HTTP请求的委托。

要实现这个委托就是需要use来绑定委托方法

  #region Use中间件 明白这个执行顺序其实就知道了原理 随意组装请求前 请求后要做的任何事情
                app.Use(next =>
                {
                    Console.WriteLine("这是1");
                    return new RequestDelegate(
                        async context =>
                        {
                            await context.Response.WriteAsync("1开始");
                            await next.Invoke(context);
                            await context.Response.WriteAsync("1结束");
                        });
                });
                app.Use(next =>
                {
                    Console.WriteLine("这是2");
                    return new RequestDelegate(
                        async context =>
                        {
                            await context.Response.WriteAsync("2开始");
                            await next.Invoke(context);
                            await context.Response.WriteAsync("2结束");
                        });
                });
                app.Use(next =>
                {
                    Console.WriteLine("这是3");
                    return new RequestDelegate(
                        async context =>
                        {
                            await context.Response.WriteAsync("3开始");
                            //await next.Invoke(context);//最后这个没有执行Next
                            await context.Response.WriteAsync("请求的核心功能");
                            await context.Response.WriteAsync("3结束");
                        });
                });
            //执行顺序是 1开始 2开始 3开始  请求的核心功能 3结束 2结束 1结束 一看和模板方法差不多 AOP实现的典范 随意可扩展定制
             #endregion
app.use解析

下面就是build源码解读

这里就解释了为什么user的执行顺序了就是防止一个委托集合里面反转一下

猜你喜欢

转载自www.cnblogs.com/LZXX/p/13202182.html
今日推荐