ASP.NET Core Middleware管道介绍

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管道介绍的更多相关文章
- ASP.NET Core HTTP 管道中的那些事儿
前言 马上2016年就要过去了,时间可是真快啊. 上次写完 Identity 系列之后,反响还不错,所以本来打算写一个 ASP.NET Core 中间件系列的,但是中间遇到了很多事情.首先是 NPOI ...
- asp.net core mvc 管道之中间件
asp.net core mvc 管道之中间件 http请求处理管道通过注册中间件来实现各种功能,松耦合并且很灵活 此文简单介绍asp.net core mvc中间件的注册以及运行过程 通过理解中间件 ...
- 用.Net Core控制台模拟一个ASP.Net Core的管道模型
在我的上几篇文章中降到了asp.net core的管道模型,为了更清楚地理解asp.net core的管道,再网上学习了.Net Core控制台应用程序对其的模拟,以加深映像,同时,供大家学习参考. ...
- ASP.NET Core Middleware 抽丝剥茧
一. 宏观概念 ASP.NET Core Middleware是在应用程序处理管道pipeline中用于处理请求和操作响应的组件. 每个组件是pipeline 中的一环. 自行决定是否将请求传递给下一 ...
- ASP.NET Core Middleware (转载)
What is Middleware? Put simply, you use middleware components to compose the functionality of your A ...
- Prerender Application Level Middleware - ASP.NET Core Middleware
In the previous post Use Prerender to improve AngularJS SEO, I have explained different solutions at ...
- 任务27:Middleware管道介绍
任务27:Middleware管道介绍 HttpContext 图中注册了三个中间件,所有httpContext就会在这三个管道上都执行HttpContext,会在Reponse里面写一些东西.所有东 ...
- 【ASP.NET Core快速入门】(八)Middleware管道介绍、自己动手构建RequestDelegate管道
中间件是汇集到以处理请求和响应的一个应用程序管道的软件. 每个组件: 可以选择是否要将请求传递到管道中的下一个组件. 之前和之后调用管道中的下一个组件,可以执行工作. 使用请求委托来生成请求管道. 请 ...
- 菜鸟入门【ASP.NET Core】8:Middleware管道介绍、自己动手构建RequestDelegate管道
中间件:是汇集到以处理请求和响应的一个应用程序管道的软件. 每个组件: 可以选择是否要将请求传递到管道中的下一个组件. 之前和之后调用管道中的下一个组件,可以执行工作. 使用请求委托来生成请求管道. ...
随机推荐
- aix安装nmon
aix5310以上都系统自带了nmon,其他低版本需要手动安装 软件包下载地址https://www.ibm.com/developerworks/community/wikis/home?lang= ...
- JS的Ajax和同源策略
JS实现的ajax AJAX核心(XMLHttpRequest) 其实AJAX就是在Javascript中多添加了一个对象:XMLHttpRequest对象.所有的异步交互都是使用XMLHttpSer ...
- MySQL--表操作(约束条件foreign key关联表 多对1,多对多,1对1)
一.所有数据都存放于一张表中的弊端:1.表的组织结构复杂不清晰2.浪费空间3.扩展性极差 解决方案:分表a.分表 + foreign key: 有硬性限制(关联表中的关联字段内容必须来自于被关联表), ...
- hibernate映射关系(多对多)
Student与Teacher关系多对多(只建了2个实体类) public class Student { private int id; private String name; private S ...
- 一种简单的生产环境部署Node.js程序方法
最近在部署Node.js程序时,写了段简单的脚本,发觉还挺简单的,忍不住想与大家分享. 配置文件 首先,本地测试环境和生产环境的数据库连接这些配置信息是不一样的,需要将其分开为两个文件存储 到conf ...
- Python-视图 触发器 事务 存储过程
1.视图2.触发器*** 在某个时间发生了某个事件时 会自动触发一段sql语句3.事务*****4.存储过程***** 5.函数6.备份与恢复*** mysqldump -u -p (库名 [表名] ...
- cmder 神器 +curl
cmder 神器 https://www.jianshu.com/p/7a706c0a3411 curl https://www.cnblogs.com/zhuzhenwei918/p/6781314 ...
- LeetCode(120):三角形最小路径和
Medium! 题目描述: 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] ...
- HTML&javaSkcript&CSS&jQuery&ajax(七)
’一.HTML5 实例 <video width="430" controls> <source src="mov_nnn.mp4" t ...
- Nginx详解二十四:Nginx深度学习篇之灰度发布
实战场景 - 灰度发布 灰度发布的作用:按照一定的关系区别,分部分的代码进行上线,使代码的发布能平滑过渡上线实现方式: 1.用户的信息cookie等信息区别 2.根据用户的IP地址 安装memcach ...