当请求过来之后,进入管道中 一个个的中间件进行处理,然后短路进行返回 在从后往前一个个的中间件结束出去
其实就是在将一个委托请求在 中间件中传递
IApplicationBuilder app 请求管道 中间件(func<>委托) 在这个配置中心 做的工作就是 说明一下委托 然后呢 放到list中
app.Use 添加一个中间件(func<>委托)
app.Run 添加一个人工建造终端中间件 (func<>委托)
app.UseMiddleWare() 自定义中间件 (func<>委托)
原理是:1 在配置 app .use 和 app .run 的时候其实是源码 ApplicationBuilder.use 就是先把 func<>委托 添加到 List<> compents 中
2 然后 源码 ApplicationBuilder.bulid 构造的时候
1:建立终端中间件 (防止人工建造没有一个中间件的情况) 2 翻转 list compents 保证顺序 循环操作
3:循环中 从终端中间件委托调用上一个委托在返回上一个委托 建立委托之间包含关系 形成一条链子 就是 next的作用 (责任链模式)
执行的时候是 主机 run的时候 把请求过来 调用第一个中间件 然后 就 一个个的进行了 执行 短路后返回 响应
//自定义中间件的一些约束 RequestDelegate InvokeAsync
publicclassCustomMiddleware
{
privatereadonlyRequestDelegate _next;
publicCustomMiddleware(RequestDelegate next)
{
_next = next;
}
publicasyncTask InvokeAsync(HttpContext httpContext)
{
Console.WriteLine( "CustomMiddleware (in)");
await_next.Invoke(httpContext);
Console.WriteLine( "CustomMiddleware (out)");
}
}
publicstaticclassCustomMiddlewareExtension
{
publicstaticIApplicationBuilder UseCustomMiddle(thisIApplicationBuilder builder)
{
returnbuilder.UseMiddleware<CustomMiddleware>;
}