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管道
中间件:是汇集到以处理请求和响应的一个应用程序管道的软件. 每个组件: 可以选择是否要将请求传递到管道中的下一个组件. 之前和之后调用管道中的下一个组件,可以执行工作. 使用请求委托来生成请求管道. ...
随机推荐
- Python在线聊天软件(Tkinter)
1.python2.7下安装 apt-get install python-tk 主要功能是实现客户端与服务器端的双向通信,这个小东西用到的主要知识点: 1.Python Socket:2.Pytho ...
- 竞赛常用STL备忘录
__builtin: __builtin_popcount:二进制中 1 的个数__builtin_ctz:末尾的 0,即对 lowbit 取log__builtin_clz:开头的 0,用 31 减 ...
- 添加struts2本地dtd限制
将源码保重的struts-2.1.7.dtd文件拷贝到dtds文件夹中 打开eclipse配置文件window/preferences,搜索xml找到XML Catalog
- springcloud-1: 用官方的pom.xml配置添加依赖失败
在eclipse中用STS生成了一个springcloud应用,pom.xml的核心配置如下: <parent> <groupId>org.springframework.bo ...
- ebs 12.1.1 单节点多用户安装
本次测试环境:操作系统 oracle linux 6.9 oracle ebs 12.1.1 192.168.20.210 erpapp1.hthorizon.com erpapp1 yum ...
- 解决FTPClient上传文件为空,显示0字节
JAVA使用FTPClient上传文件时总是为空,而使用FileZilla客户端时却不会. 后来查了下资料,FTP服务器有被动模式和主动模式.(具体查另外资料) 在JAVA中将FTPClient设置为 ...
- PHPStorm配置Xdebug官方文档
1 配置Xdebug 下载Xdebug 下载与您的PHP版本兼容的Xdebug扩展,并将其保存在该php/文件夹中. php/文件夹 的位置是在安装PHP引擎期间定义的. 如果您使用的是AMP软件包, ...
- [加密算法]为什么说RSA难以被破解
RSA算法运用了数学“两个大的质数相乘,难以在短时间内将其因式分解”的这么一套看似简单事实上真的是很困难的一个数学难题...... 以前也接触过RSA加密算法,感觉这个东西太神秘了,是数学家的事,和我 ...
- boolalpha的作用
#include <iostream>using namespace std;int main(){ bool b=true; cout << &q ...
- Confluence 6 查看内容索引概要
内容索引,通常也被称为查找索引,这个索引被用来在 Confluence 中支持查找.这个索引同时也被其他的一些功能使用,例如在归档邮件中构建邮件主题,View Space Activity 的特性和将 ...