标签: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
下面就是build源码解读
这里就解释了为什么user的执行顺序了就是防止一个委托集合里面反转一下
.Net Core全面解析2_管道模型,中间件,核心 Startup.Configure解析
标签:syn 模板方法 response 就是 inf 初始化 控制 委托 管道模型
原文地址:https://www.cnblogs.com/LZXX/p/13202182.html