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管道模型相关推荐

  1. asp.net core轻松入门之MVC中Options读取配置文件

    接上一篇中讲到利用Bind方法读取配置文件 ASP.NET Core轻松入门Bind读取配置文件到C#实例 那么在这篇文章中,我将在上一篇文章的基础上,利用Options方法读取配置文件 首先注册MV ...

  2. 【笔记目录1】【jessetalk 】ASP.NET Core快速入门_学习笔记汇总

    当前标签: ASP.NET Core快速入门 共2页: 1 2 下一页  任务50:Identity MVC:DbContextSeed初始化 GASA 2019-03-02 14:09 阅读:16 ...

  3. ASP.NET Core 2.0 : 八.图说管道,唐僧扫塔的故事

    ASP.NET Core 2.0 : 八.图说管道,唐僧扫塔的故事 原文:ASP.NET Core 2.0 : 八.图说管道,唐僧扫塔的故事 本文通过一张GIF动图来继续聊一下ASP.NET Core ...

  4. Asp.Net Core 轻松学-多线程之Task快速上手

    Asp.Net Core 轻松学-多线程之Task快速上手 原文:Asp.Net Core 轻松学-多线程之Task快速上手 前言     Task是从 .NET Framework 4 开始引入的一 ...

  5. Asp.Net Core 轻松学-利用日志监视进行服务遥测

    原文:Asp.Net Core 轻松学-利用日志监视进行服务遥测 前言     在 Net Core 2.2 中,官方文档表示,对 EventListener 这个日志监视类的内容进行了扩充,同时赋予 ...

  6. Asp.Net Core 轻松学-玩转配置文件

    目录 前言 另类方式使用 hosting.json 使程序运行于多个端口 结语 前言     在 .NET Core 项目中,配置文件有着举足轻重的地位:与.NetFramework 不同的是,.NE ...

  7. 6.1 ASP.NET Core Web 入门

    6.1 ASP.NET Core Web 入门 ASP.NET Core中,严格来讲只有一个Asp.net Core MVC一个框架,Asp.net Core MVC既支持基于视图的MVC开发,也支持 ...

  8. ASP.NET Core 1.0中的管道-中间件模式

    ASP.NET Core 1.0借鉴了Katana项目的管道设计(Pipeline).日志记录.用户认证.MVC等模块都以中间件(Middleware)的方式注册在管道中.显而易见这样的设计非常松耦合 ...

  9. ASP.NET Core快速入门(第4章:ASP.NET Core HTTP介绍)--学习笔记

    点击蓝字关注我们 课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 任务22:课程介绍 1.HTTP 处理过程 2.WebHos ...

最新文章

  1. asp.net 添加成功弹出个div提示_Word双栏目录怎么做,这3个步骤早知道,让人眼前一亮...
  2. 我对图像金字塔的理解及OpenCV下的实现代码
  3. mysql-5.6.x半同步复制配置
  4. 举例详解PHP归并排序的实现
  5. Adobe Acrobat Pro设置高亮快捷键
  6. html选择文件夹插件,js/jq仿window文件夹框选操作插件
  7. 分叉并加入Java 7 – JSR 166并发实用程序
  8. form字体和颜色java安卓开发_Android 修改App中默认TextView的字体和颜色
  9. python selenium post请求_工作随笔——selenium支持post请求,支持自定义header
  10. Linux 设备驱动开发 —— 设备树在platform设备驱动中的使用
  11. 类型的值怎么用es查询_腾讯游戏信用分怎么查询在哪看 有什么用怎么提升介绍...
  12. 523. 连续的子数组和
  13. 解决jquery下checked取值问题...
  14. JS屏蔽360浏览器代码
  15. windows防火墙设置_合理利用Windows 7防火墙,阻止部分功能,避免网络恶意软件攻击...
  16. [C++/CLI编程宝典][3]C++/CLI能做什么
  17. 手机拍照怎么识别文字
  18. 选修课程期末作业 : 大象基金交易信息系统分析与设计报告
  19. Excel中怎么把一数列数据,用逗号隔开合并到一行
  20. 儿童节到了!让 GitHub 上这几个小游戏帮你找回童真吧!

热门文章

  1. About Gaelyk
  2. div+css布局与seo的关系
  3. 邮件服务器IMail教程(2)
  4. (转)ComputerStyle与currentStyle的区别
  5. 5分钟部署一个Hello World Servlet到CloudFoundry 1
  6. [POJ1743]Musical Theme
  7. 省级刊物发表有什么要求?需注意什么事项?
  8. 寻路之 A* 搜寻算法
  9. Magento 2.0 Alipay Cross-Border Mobile Payment Extension - Magento 2.0 支付宝跨境支付手机版...
  10. HTML5之美一 --- 转载