ASP.NET Core轻松入门之Middleware管道模型
来源:互联网 发布:冒险岛游戏数据库系统 编辑:程序博客网 时间:2024/05/22 08:23
Middleware指的是微软的的asp.net core的管道模型。其原理可以用微软官方的下图展示:
原理如上图,随着Request的发起,HttpContext会经历多个管道处理(图中的箭头游走方向)每经过一个处理,HttpContext内都会被加入一些东西或者被做一些修改,在每个管道处理完成后,随着Next()传到下一个管道处理。
下面 ,我们在ASP.Net Core应用程序中添加我们自己构建的管道。
首先,我们新建一个空白的ASP.NET Core应用程序。
然后,打开Startup.cs ,在congfig方法内加入一些代码。
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.Use(async (context, next) => { await context.Response.WriteAsync("1"); await next.Invoke(); }); app.Run(async (context) => { await context.Response.WriteAsync("Hello World!"); }); }
加入了红色部分后,我们看看网页如何显示。
在hello world 之前输出了1,那么我们把next删除之后,看看会怎样
app.Use(async (context, next) => { await context.Response.WriteAsync("1"); // await next.Invoke(); });
结果如下,只输出一个1
所以说,如果没有next方法,是不会调用下一个管道的。
还有一种使用方法是这样的。
因为我们看到,use方法可以传入一个RequestDelegate,返回也是一个RequestDelegate,所以我们可以写这么一个方法
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.Use(async (context, next) => { await context.Response.WriteAsync("1"); await next.Invoke(); }); app.Use((next) => { return (context) => { context.Response.WriteAsync("2"); return next(context); }; }); app.Run(async (context) => { await context.Response.WriteAsync("Hello World!"); }); }
可以看到 ,添加的代码,传入传出都是一个委托,如果这个函数看不懂的,请自行百度 lambda表达式和委托相关的知识。
输出,我们看到如下结果:
(把上文注释了的next方法记得恢复)
我们的asp.net core管道中,其实,还提供了路由方法(Map),其使用方法如下:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.Map("/test", appTest => { appTest.Run(async (context) => { await context.Response.WriteAsync("this is tets Map"); }); }); app.Use(async (context, next) => { await context.Response.WriteAsync("1"); await next.Invoke(); }); app.Use((next) => { return (context) => { context.Response.WriteAsync("2"); return next(context); }; }); app.Run(async (context) => { await context.Response.WriteAsync("Hello World!"); }); }
要注意得是Map方法要放在最后一个Next方法得前面,因为如果放在后面,会被截断不执行这个管道,你体会一下!
这是全部关于管道得介绍,有任何疑问欢迎大家来我的个人网站给我留言。
阅读全文
0 0
- ASP.NET Core轻松入门之Middleware管道模型
- [ASP.NET Core] Middleware
- [ASP.NET Core] Middleware
- Asp.Net Core轻松入门之WebHost的配置
- ASP.NET Core 运行原理解剖[3]:Middleware-请求管道的构成
- ASP.NET Core 运行原理解剖[3]-Middleware-请求管道的构成
- ASP.NET Core 运行原理解剖[3]-Middleware-请求管道的构成
- ASP.NET Core 运行原理解剖[3]:Middleware-请求管道的构成
- [ASP.NET Core] Static File Middleware
- ASP.NET Core 开发-中间件(Middleware)
- asp.net core轻松入门之MVC中Options读取配置文件
- ASP.NET Core轻松入门之Configure中IHostingEnvironment和IApplicationLifetime的使用
- ASP.NET管道和.NET Core管道
- ASP.NET 管道模型
- ASP.NET 管道模型
- 【ASP.NET】管道模型
- 【ASP.NET】管道模型
- .NET Core 中间件MiddleWare
- strange final examination
- ViewPager无限轮播
- C语言操作符总结
- 数据库的增删改查
- 8.java.util.Arrays
- ASP.NET Core轻松入门之Middleware管道模型
- 内存管理
- 3个著名加密算法(MD5、RSA、DES)的解析
- RabbitMQ(四)
- git 应用 merge
- 520. Detect Capital
- Python的变量以及运算符
- 购物车和订单
- docker pull 过程distribution源码 分析