.Net Core全面解析2_管道模型,中间件,核心 Startup.Configure解析
2021-01-29 15:15
标签:syn 模板方法 response 就是 inf 初始化 控制 委托 管道模型 1.asp.net core 实际是一个控制台应用程序 。请求管道模型 执行顺序就是:发送http请求>被Kestrel解析得到HttpContext->然后被后台代码处理Request>返回Response->经由Kestrel回发到客户端 所以Startup.Configure就是指定我们的代码如何去处理请求 这个Startup.Configure方法,叫请求级(所有请求生效,且只执行一次其实也就是初始化)----而页面级就是 请求一个页面Home/Index 2.Startup.Configure中间件 方法源码解析 Configure的核心其实就是IApplicationBuilder app这个参数 而里面需要实现的就是build方法:它的注释:构建此应用程序用来处理HTTP请求的委托。 要实现这个委托就是需要use来绑定委托方法 下面就是build源码解读 这里就解释了为什么user的执行顺序了就是防止一个委托集合里面反转一下 .Net Core全面解析2_管道模型,中间件,核心 Startup.Configure解析 标签:syn 模板方法 response 就是 inf 初始化 控制 委托 管道模型 原文地址:https://www.cnblogs.com/LZXX/p/13202182.html
所谓管道,就是拿着HttpContext,经过多个步骤的加工,生成Response,而这其实就是管道模型请求 #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
文章标题:.Net Core全面解析2_管道模型,中间件,核心 Startup.Configure解析
文章链接:http://soscw.com/index.php/essay/48738.html