ASP.NET Core轻松入门之Middleware管道模型
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方法得前面,因为如果放在后面,会被截断不执行这个管道,你体会一下!
这是全部关于管道得介绍,有任何疑问欢迎大家来我的个人网站给我留言。
ASP.NET Core轻松入门之Middleware管道模型相关推荐
- asp.net core轻松入门之MVC中Options读取配置文件
接上一篇中讲到利用Bind方法读取配置文件 ASP.NET Core轻松入门Bind读取配置文件到C#实例 那么在这篇文章中,我将在上一篇文章的基础上,利用Options方法读取配置文件 首先注册MV ...
- 【笔记目录1】【jessetalk 】ASP.NET Core快速入门_学习笔记汇总
当前标签: ASP.NET Core快速入门 共2页: 1 2 下一页 任务50:Identity MVC:DbContextSeed初始化 GASA 2019-03-02 14:09 阅读:16 ...
- ASP.NET Core 2.0 : 八.图说管道,唐僧扫塔的故事
ASP.NET Core 2.0 : 八.图说管道,唐僧扫塔的故事 原文:ASP.NET Core 2.0 : 八.图说管道,唐僧扫塔的故事 本文通过一张GIF动图来继续聊一下ASP.NET Core ...
- Asp.Net Core 轻松学-多线程之Task快速上手
Asp.Net Core 轻松学-多线程之Task快速上手 原文:Asp.Net Core 轻松学-多线程之Task快速上手 前言 Task是从 .NET Framework 4 开始引入的一 ...
- Asp.Net Core 轻松学-利用日志监视进行服务遥测
原文:Asp.Net Core 轻松学-利用日志监视进行服务遥测 前言 在 Net Core 2.2 中,官方文档表示,对 EventListener 这个日志监视类的内容进行了扩充,同时赋予 ...
- Asp.Net Core 轻松学-玩转配置文件
目录 前言 另类方式使用 hosting.json 使程序运行于多个端口 结语 前言 在 .NET Core 项目中,配置文件有着举足轻重的地位:与.NetFramework 不同的是,.NE ...
- 6.1 ASP.NET Core Web 入门
6.1 ASP.NET Core Web 入门 ASP.NET Core中,严格来讲只有一个Asp.net Core MVC一个框架,Asp.net Core MVC既支持基于视图的MVC开发,也支持 ...
- ASP.NET Core 1.0中的管道-中间件模式
ASP.NET Core 1.0借鉴了Katana项目的管道设计(Pipeline).日志记录.用户认证.MVC等模块都以中间件(Middleware)的方式注册在管道中.显而易见这样的设计非常松耦合 ...
- ASP.NET Core快速入门(第4章:ASP.NET Core HTTP介绍)--学习笔记
点击蓝字关注我们 课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 任务22:课程介绍 1.HTTP 处理过程 2.WebHos ...
最新文章
- asp.net 添加成功弹出个div提示_Word双栏目录怎么做,这3个步骤早知道,让人眼前一亮...
- 我对图像金字塔的理解及OpenCV下的实现代码
- mysql-5.6.x半同步复制配置
- 举例详解PHP归并排序的实现
- Adobe Acrobat Pro设置高亮快捷键
- html选择文件夹插件,js/jq仿window文件夹框选操作插件
- 分叉并加入Java 7 – JSR 166并发实用程序
- form字体和颜色java安卓开发_Android 修改App中默认TextView的字体和颜色
- python selenium post请求_工作随笔——selenium支持post请求,支持自定义header
- Linux 设备驱动开发 —— 设备树在platform设备驱动中的使用
- 类型的值怎么用es查询_腾讯游戏信用分怎么查询在哪看 有什么用怎么提升介绍...
- 523. 连续的子数组和
- 解决jquery下checked取值问题...
- JS屏蔽360浏览器代码
- windows防火墙设置_合理利用Windows 7防火墙,阻止部分功能,避免网络恶意软件攻击...
- [C++/CLI编程宝典][3]C++/CLI能做什么
- 手机拍照怎么识别文字
- 选修课程期末作业 : 大象基金交易信息系统分析与设计报告
- Excel中怎么把一数列数据,用逗号隔开合并到一行
- 儿童节到了!让 GitHub 上这几个小游戏帮你找回童真吧!
热门文章
- About Gaelyk
- div+css布局与seo的关系
- 邮件服务器IMail教程(2)
- (转)ComputerStyle与currentStyle的区别
- 5分钟部署一个Hello World Servlet到CloudFoundry 1
- [POJ1743]Musical Theme
- 省级刊物发表有什么要求?需注意什么事项?
- 寻路之 A* 搜寻算法
- Magento 2.0 Alipay Cross-Border Mobile Payment Extension - Magento 2.0 支付宝跨境支付手机版...
- HTML5之美一 --- 转载