码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2020-06-28 12:53:49      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:syn   模板方法   response   就是   inf   初始化   控制   委托   管道模型   

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的执行顺序了就是防止一个委托集合里面反转一下

技术图片

 

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

标签:syn   模板方法   response   就是   inf   初始化   控制   委托   管道模型   

原文地址:https://www.cnblogs.com/LZXX/p/13202182.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!