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管道
中间件:是汇集到以处理请求和响应的一个应用程序管道的软件. 每个组件: 可以选择是否要将请求传递到管道中的下一个组件. 之前和之后调用管道中的下一个组件,可以执行工作. 使用请求委托来生成请求管道. ...
随机推荐
- dubbo源码分析5——SPI机制_AdaptiveExtension的原理和作用
private T createAdaptiveExtension() { try { return injectExtension((T) getAdaptiveExtensionClass().n ...
- linux快速将磁盘额外空间扩展到某一挂载点
由于之前在创建用户时,为该用户目录分配的空间只有5G,在后续的开发,存放的东西越来越多,空间眼看就不够用了,网上查了一下,很多都是教我们将其余挂载点分配过多的空间分配到空间不足的挂载点,步骤还不算太复 ...
- Linux更改目录及其子目录、文件的访问权限
修改某个目录及其下所有文件的权限,要使用-R参数,表示启动递归处理. 例如: #仅将/home/user/test目录的权限设置为rwxr-xr-x /home/user/test #表示将整个/ho ...
- hibernate框架学习第三天:对象状态、一级缓存、快照等
对象的状态 瞬时状态: 瞬时对象(TO) 应用程序创建出来的对象,不受H3控制 注意:TO对象不具有OID,一旦为TO赋值OID,那么此时就不是TO 持久化状态:持久化对象(PO) 受H3控制的对象, ...
- shell 学习之if语句
bash中如何实现条件判断?条件测试类型: 整数测试 字符测试 文件测试 一.条件测试的表达式: [ expression ] 括号两端必须要有空格 [[ expres ...
- jqueryui插件slider的简单使用
<!DOCTYPE html> <html> <head> <title>slider</title> <meta charset=& ...
- Linq与Lambda常用查询语法
1.查询全部 2.按条件查询全部 3.去除重复 4.连接查询 between and 5.排序 6.分组
- python深浅拷贝与赋值
初学编程的小伙伴都会对于深浅拷贝的用法有些疑问,今天我们就结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~ 预备知识一——python的变量及其存储 在详细的了解python中赋 ...
- 计算机信息类ComputerInfo(车)
using System; using System.Management; using System.Net; using System.Net.Sockets; using System.Text ...
- IOS UINavigationController 更改返回按钮
UIButton *back = [UIButton buttonWithType:UIButtonTypeCustom]; back.titleLabel.font = [UIFont boldSy ...