public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.Use(next => {
return async context => {
await context.Response.WriteAsync("A11111111</br>");
await next.Invoke(context); //下一中间件
await context.Response.WriteAsync("B11111111</br>");
};
});
app.Use(next => {
return async context => {
await context.Response.WriteAsync("A22222222</br>");
await next.Invoke(context); //下一中间件
await context.Response.WriteAsync("B22222222</br>");
};
});
app.Use(next => {
return async context => {
await context.Response.WriteAsync("A33333333</br>");
await context.Response.WriteAsync("B33333333</br>");
};
}); }

运行的时候是先执行3->2->1 倒序

自己动手构建RequestDelegate管道

    class Program
{
static void Main(string[] args)
{
ApplicationBuilder app = new ApplicationBuilder();
app.Use(next =>
{
return async context =>
{
await context.WriteAsync("A11111111\r\n");
await next.Invoke(context); //下一中间件
await context.WriteAsync("B11111111\r\n");
};
});
app.Use(next =>
{
return async context =>
{
await context.WriteAsync("A22222222\r\n");
await next.Invoke(context); //下一中间件
await context.WriteAsync("B22222222\r\n");
};
});
app.Use(next =>
{
return async context =>
{
await context.WriteAsync("A33333333\r\n");
await context.WriteAsync("B33333333\r\n");
};
});
var requestDelegate = app.Build();
requestDelegate.Invoke(new HttpContext());
Console.ReadLine();
} public delegate Task RequestDelegate(HttpContext context); public class HttpContext
{
public async Task WriteAsync(string text)
{
Console.WriteLine(text);
await Task.CompletedTask;
}
} public class ApplicationBuilder
{
public List<Func<RequestDelegate, RequestDelegate>> _list = new List<Func<RequestDelegate, RequestDelegate>>();
RequestDelegate requestDelegate = new RequestDelegate(async context =>
{
Console.WriteLine("404\r\n");
await Task.CompletedTask;
}); public RequestDelegate Build()
{
_list.Reverse();
foreach (var func in _list)
{
requestDelegate = func.Invoke(requestDelegate);
}
return requestDelegate;
} public ApplicationBuilder Use(Func<RequestDelegate, RequestDelegate> middleware)
{
this._list.Add(middleware);
return this;
}
}
}

ASP.NET Core Middleware管道介绍的更多相关文章

  1. ASP.NET Core HTTP 管道中的那些事儿

    前言 马上2016年就要过去了,时间可是真快啊. 上次写完 Identity 系列之后,反响还不错,所以本来打算写一个 ASP.NET Core 中间件系列的,但是中间遇到了很多事情.首先是 NPOI ...

  2. asp.net core mvc 管道之中间件

    asp.net core mvc 管道之中间件 http请求处理管道通过注册中间件来实现各种功能,松耦合并且很灵活 此文简单介绍asp.net core mvc中间件的注册以及运行过程 通过理解中间件 ...

  3. 用.Net Core控制台模拟一个ASP.Net Core的管道模型

    在我的上几篇文章中降到了asp.net core的管道模型,为了更清楚地理解asp.net core的管道,再网上学习了.Net Core控制台应用程序对其的模拟,以加深映像,同时,供大家学习参考. ...

  4. ASP.NET Core Middleware 抽丝剥茧

    一. 宏观概念 ASP.NET Core Middleware是在应用程序处理管道pipeline中用于处理请求和操作响应的组件. 每个组件是pipeline 中的一环. 自行决定是否将请求传递给下一 ...

  5. ASP.NET Core Middleware (转载)

    What is Middleware? Put simply, you use middleware components to compose the functionality of your A ...

  6. Prerender Application Level Middleware - ASP.NET Core Middleware

    In the previous post Use Prerender to improve AngularJS SEO, I have explained different solutions at ...

  7. 任务27:Middleware管道介绍

    任务27:Middleware管道介绍 HttpContext 图中注册了三个中间件,所有httpContext就会在这三个管道上都执行HttpContext,会在Reponse里面写一些东西.所有东 ...

  8. 【ASP.NET Core快速入门】(八)Middleware管道介绍、自己动手构建RequestDelegate管道

    中间件是汇集到以处理请求和响应的一个应用程序管道的软件. 每个组件: 可以选择是否要将请求传递到管道中的下一个组件. 之前和之后调用管道中的下一个组件,可以执行工作. 使用请求委托来生成请求管道. 请 ...

  9. 菜鸟入门【ASP.NET Core】8:Middleware管道介绍、自己动手构建RequestDelegate管道

    中间件:是汇集到以处理请求和响应的一个应用程序管道的软件. 每个组件: 可以选择是否要将请求传递到管道中的下一个组件. 之前和之后调用管道中的下一个组件,可以执行工作. 使用请求委托来生成请求管道.  ...

随机推荐

  1. Python使用MySQL数据库【转】

    转自 Python使用MySQL数据库(新)[很详细][fetchall和fetchmany有啥区别呢?] - CSDN博客https://blog.csdn.net/u011350541/artic ...

  2. vue生命周期学习(watch跟computed)

    1.watch钩子函数监听数据的变化 watch 的一个特点是,最初绑定的时候是不会执行的,要等到 firstName 改变时才执行监听计算. <div> <p>FullNam ...

  3. 一个优秀windows C++ 程序员该有哪些知识

  4. SQL Server 之 内部连接

    1.内部联接 2.外部联接 外部联接扩展了内部联接的功能,会把内联接中删除表源中的一些保留下来,由于保存下来的行不同,可将外部联接分为左联接和右联接. 2.1左联接: 如果左表的某一行在右表中没有匹配 ...

  5. JS如何截取一段字符中,某一个字符的前面和后面的字符

    比如这里的1992631934@qq.com如何获取到@前面的1992631934和@后面的qq.com js代码如下: var mail="1992631934@qq.com" ...

  6. 13)django-ORM(连表一对多,外键创建,创建数据,3种查询)

    一对多需要使用外键 一:外键创建ForeignKey b=models.ForeignKey(to="Business",to_field=("id"))#dj ...

  7. numpy函数:[1]shape用法

    shape函数是numpy.core.fromnumeric中的函数,它的功能是读取矩阵的长度,比如shape[0]就是读取矩阵第一维度的长度.它的输入参数可以使一个整数表示维度,也可以是一个矩阵.

  8. Confluence 6 管理应用服务器内存设置

    应用服务器中的最小和最大 JVM Heap 空间配置将会影响系统的性能.Confluence 管理员可能希望对默认的配置进行修改,基于你系统的负载不同配置情况也会有所不同,请参考页面 Server H ...

  9. web的分页方法

    web分页的三种方式,闲来无事总结一下. 1.使用前端表格插件进行分页 例如用bootstrap的拓展table组件,注意设置其分页属性时设置为"client", 即是 sideP ...

  10. 实用的sublime插件集合 – sublime推荐必备插件

    Package Control 功能:安装包管理 简介:sublime插件控制台,提供添加.删除.禁用.查找插件等功能 使用:https://sublime.wbond.net/installatio ...