.Net Core 管道机制
开篇先上一张中间件原理图,帮助大家对管道机制形成一个直观的认识

下面我们实现一个简单的管道机制,以此为例深入理解管道机制的原理
1. 首先定义一个委托,该委托接收一个上下文对象,返回值为Task,代码实现如下
public delegate Task RequestDelegate(HttpContext context);
2. 实现创建管道的类
首先解释一个名词——中间件(Middleware),中间件是被组装成一个应用程序管道来处理请求和响应的软件组件,
该例子中中间件的实现是一个Func<RequestDelegate, RequestDelegate>的委托
管道类的实现代码如下
public class ApplicationBuilder : IApplicationBuilder
{
private IList<Func<RequestDelegate, RequestDelegate>> middlewares = new List<Func<RequestDelegate, RequestDelegate>>();
public RequestDelegate Build()
{
RequestDelegate seed = context => Task.Run(() => {});
return middlewares.Reverse().Aggregate(seed, (next, current) => current(next));//管道机制的重难点
}
public IApplicationBuilder Use(Func<RequestDelegate, RequestDelegate> middleware)
{
middlewares.Add(middleware);
return this;
}
}
3. 创建管道
首先创建一个中间件,中间件的实现代码如下
Func<RequestDelegate, RequestDelegate> middleware = next =>
{
return context =>
{
//logic return next(context);//next
};
};
实例化管道类,并添加一个或多个中间件,创建管道并执行
IApplicationBuilder app = new ApplicationBuilder();
app.Use(middleware);//添加中间件
app.Build()(context);//创建管道并运行
.Net Core 管道机制的更多相关文章
- ASP.NET Core 中的管道机制
		
首先,很感谢在上篇文章 C# 管道式编程 中给我有小额捐助和点赞的朋友们,感谢你们的支持与肯定.希望我的每一次分享都能让彼此获得一些收获,当然如果我有些地方叙述的不正确或不当,还请不客气的指出.好了, ...
 - .net core 注入机制与Autofac
		
本来是要先出注入机制再出 管道 的,哈哈哈……就是不按计划来…… 这里扯扯题外话:为什么要注入(DI,dependency-injection),而不用 new 对象? 可能我们都很清楚,new 对象 ...
 - 通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流程[下]:管道是如何构建起来的?
		
在<中篇>中,我们对管道的构成以及它对请求的处理流程进行了详细介绍,接下来我们需要了解的是这样一个管道是如何被构建起来的.总的来说,管道由一个服务器和一个HttpApplication构成 ...
 - ASP.NET Core管道深度剖析(4):管道是如何建立起来的?
		
在<管道是如何处理HTTP请求的?>中,我们对ASP.NET Core的请求处理管道的构成以及它对请求的处理流程进行了详细介绍,接下来我们需要了解的是这样一个管道是如何被构建起来的.这样一 ...
 - ASP.NET Core管道深度剖析(2):创建一个“迷你版”的管道来模拟真实管道请求处理流程
		
从<ASP.NET Core管道深度剖析(1):采用管道处理HTTP请求>我们知道ASP.NET Core请求处理管道由一个服务器和一组有序的中间件组成,所以从总体设计来讲是非常简单的,但 ...
 - Core管道中的处理流程3
		
通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流程[下]:管道是如何构建起来的? 在<中篇>中,我们对管道的构成以及它对请求的处理流程进行了详细介绍,接下 ...
 - .NET Core 管道
		
从用户发请求到服务器响应返回数据 请求从 Request进去 先经过 Middleware(中间件) 然后经过AuthoriationFilters授权验证(token验证和 多租户验证) 在经 ...
 - DotNet Core管道通信
		
前言 在之前,我们需要明确的一个概念是, Web 程序中,用户的每次请求流程都是线性的,放在 ASP.NET Core 程序中,都会对应一个 请求管道(request pipeline),在这个请求管 ...
 - 关于阮一峰老师es6(第三版)中管道机制代码的理解浅析
		
最近正在学习阮一峰老师的es6(第三版)教材,在学到第七章<函数的扩展>中的箭头函数嵌套时,文中提到了一个关于“管道机制”的示例,文中源代码如下: //es6(第三版)教材中的管道机制源代 ...
 
随机推荐
- 安装 jemalloc for mysql
			
参考: MySQL bug:https://bugs.mysql.com/bug.php?id=83047&tdsourcetag=s_pcqq_aiomsg https://github.c ...
 - [翻译] ValueTrackingSlider
			
ValueTrackingSlider What is it? A UISlider Subclass that displays live values in a popUpView. It’s i ...
 - Linux fdisk命令详解[主分区/逻辑分区创建]
			
fdisk常见命令参数 -b<分区大小>:指定每个分区的大小: -l:列出指定的外围设备的分区表状况: -s<分区编号>:将指定的分区大小输出到标准输出上,单位为区块: -u: ...
 - 浅谈jodaTime 的使用
			
第一步:引入依赖: 1 <dependency> 2 <groupId>joda-time</groupId> 3 <artifactId>joda-t ...
 - 程序员减少代码BUG的7种方法,拒绝编程5分钟,查代码2小时!
			
0.别对警告视而不见 相信不少的程序员会使用IDEA,使用它敲代码,有时候会出现警告,那么这时你对警告就不能视而不见了. 我们的目标是,写干净的代码,做风一样的男子! 1.编程习惯 种瓜得瓜种豆得豆, ...
 - September 12th 2017 Week 37th Tuesday
			
Failure is the fog through which we glimpse triumph. 失败是迷雾,穿过它,我们就可以瞥见光明. Sometimes the fog may be t ...
 - SDN 第一次作业
			
你会选择作 网络编程 方向的程序员吗?为什么? 答: 可能会选择吧.看了那篇文章感觉网络编程的程序员和其他的程序员都并不简单,网络编程的程序员可能更要对网络的知识更加了解.我现在也有机会能接触网络方向 ...
 - ajax 跨域解决方法
			
最近在开发过程中,使用ajax去异步调取图片.在开发中这个功能没什么问题,可以后来提测,重新部署之后就有问题了,这就是ajax的跨域问题. ajax核心对象XMLHttpRequest本身是不支持跨域 ...
 - 1084. [SCOI2005]最大子矩阵【网格DP】
			
Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵 不能相互重叠. Input 第一行为n,m,k(1≤n≤100,1≤m≤ ...
 - oracle之修改/忘记用户密码
			
一.修改/忘记用户密码: ## 修改oracle用户名和密码 sqlplus /nolog ## DBA角色进入 conn /as sysdba; ## 查看用户列表 select username ...