定义:中间件是被组装成一个应用程序管道来处理请求和响应的软件组件。

上图是由微软提供的一个执行图,我们可以看到有多个中间件,每个中间件请求的时候有个next()方法把职责传递给下一个中间件,这里值得注意的是最后一个中间件没有next方法,也就是终止,然后响应。

每一个中间件都有它自己的职责,把各个执行分离开执行完成后传递给下一个,直到全部的都执行完成,这有点像职责链模式。那么它内部是怎么实现的呢,下面我们看看

值得注意的是,StartUp类里面包含两个方法,ConfigureServices是专门负责容器,Configure是负责http管道方法,所以中间件实在configure方法里面的。

我们来看看IApplicationBuilder这个里面有什么

如上图所示,我们在使用Use的时候,传入的中间件添加到委托上,传入和返回的都是一个RequestDelegate类型的,当我们进入这个方法的时候,发现它是携带HttpContext的

Use、Run 和 Map介绍

Use:上面我们可以看到他里面传入的是一个Request Delegate的委托方法,里面有一个Next()传递给下一个中间件的方法,如果该方法不执行,那么下面的中间件也是不会执行的,我们称之为短路中间件。

Run:是一种约定,并且某些中间件组件可公开在管道末尾运行的 Run[Middleware] 方法。

Map:扩展用作约定来创建管道分支。 Map* 基于给定请求路径的匹配项来创建请求管道分支。 如果请求路径以给定路径开头,则执行分支。

下面我们来看看短路中间件

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{app.Use(async (context,next)=> {await context.Response.WriteAsync("use\n");//await next.Invoke();});app.Run(async (context) =>{await context.Response.WriteAsync("run");});
}

我们来自定义一个中间件

//这是我们的中间件
public class UseTestMiddleWare
{private readonly RequestDelegate _next;public UseTestMiddleWare(RequestDelegate next){_next = next;}public async Task Invoke(HttpContext context){await context.Response.WriteAsync("invoke\n");await _next.Invoke(context);}
}
//我们需要把中间件添加到扩展里面才能使用它
public static class UseTestMiddleWareExtensions
{public static IApplicationBuilder UseTestMiddleWare(this IApplicationBuilder builder){return builder.UseMiddleware<UseTestMiddleWare>();}
}

调用:

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{app.UseTestMiddleWare();app.Run(async context =>{await context.Response.WriteAsync("hello");});
}

net core 中间件(MiddleWare)相关推荐

  1. ASP.NET Core中间件(Middleware)实现WCF SOAP服务端解析

    ASP.NET Core中间件(Middleware)进阶学习实现SOAP 解析. 本篇将介绍实现ASP.NET Core SOAP服务端解析,而不是ASP.NET Core整个WCF host. 因 ...

  2. ASP.NET Core -中间件(Middleware)使用

    ASP.NET Core开发,开发并使用中间件(Middleware). 中间件是被组装成一个应用程序管道来处理请求和响应的软件组件. 每个组件选择是否传递给管道中的下一个组件的请求,并能之前和下一组 ...

  3. ASP.NET Core 中间件Diagnostics使用

    ASP.NET Core 中间件(Middleware)Diagnostics使用.对于中间件的介绍可以查看之前的文章ASP.NET Core 开发-中间件(Middleware). Diagnost ...

  4. ASP.NET Core 中间件(Middleware)详解

    ASP.NET Core 中间件(Middleware)详解 原文:ASP.NET Core 中间件(Middleware)详解 本文为官方文档译文,官方文档现已非机器翻译 https://docs. ...

  5. ASP.NET Core 开发-中间件(Middleware)

    ASP.NET Core开发,开发并使用中间件(Middleware). 中间件是被组装成一个应用程序管道来处理请求和响应的软件组件. 每个组件选择是否传递给管道中的下一个组件的请求,并能之前和下一组 ...

  6. ASP.NET Core中间件初始化探究

    前言 在日常使用ASP.NET Core开发的过程中我们多多少少会设计到使用中间件的场景,ASP.NET Core默认也为我们内置了许多的中间件,甚至有时候我们需要自定义中间件来帮我们处理一些请求管道 ...

  7. Asp.Net Core 中间件应用实战中你不知道的那些事

    一.概述 这篇文章主要分享Endpoint 终结点路由的中间件的应用场景及实践案例,不讲述其工作原理,如果需要了解工作原理的同学, 可以点击查看以下两篇解读文章: •Asp.Net Core EndP ...

  8. .Net Core中间件和过滤器实现错误日志记录

    1.中间件的概念 ASP.NET Core的处理流程是一个管道,中间件是组装到应用程序管道中用来处理请求和响应的组件.每个中间件可以: 选择是否将请求传递给管道中的下一个组件. 可以在调用管道中的下一 ...

  9. ASP.NET Core 中间件

    1.前言 中间件(middleware)是一种装配到应用管道以处理请求和响应的组件.每个组件: ●可选择是否将请求传递到管道中的下一个组件. ●可在管道中的下一个组件前后执行工作. 请求委托(requ ...

  10. 利用Asp.Net Core的MiddleWare思想处理复杂业务流程

    最近利用Asp.Net Core 的MiddleWare思想对公司的古老代码进行重构,在这里把我的设计思路分享出来,希望对大家处理复杂的流程业务能有所帮助. 背景 一个流程初始化接口,接口中根据传入的 ...

最新文章

  1. Tomcat 下载安装、配置、启动、报错问题
  2. hashset java 键值对_Java中的各个容器的性能对比
  3. 认清几种视频接口标准---无私奉献版
  4. java中inputstream_java中InputStream String
  5. ubuntu16.04下安装ibus拼音
  6. Canny边缘检测算法原理及其VC实现详解(一)
  7. Acrobat Pro DC 教程,如何将演示文稿转换为 PDF 文件?
  8. QQ头像无法加载,显示初始默认头像的解决方法
  9. 八人抢答器讲解_八人抢答器PLC控制系统设计(最终版)最新版
  10. stay here forever中文歌词
  11. html 去掉右键菜单,右键菜单管理清除多余项目的方法教程
  12. 《指弹:November.28th》
  13. 百度智能云虚拟主机搭建ThinkPHP5.0项目
  14. 上位机软件开发流程是怎样的?上位机开发软件分享
  15. 薛定谔 | 分子对接及基于受体的虚拟筛选
  16. 单片机延时方式及使用方法
  17. 【OJ每日一练】1114 - 坐大巴
  18. centos7 离线安装docker和docker-compose
  19. subprocess.Popen()
  20. POP800免费在线客服系统

热门文章

  1. 位运算在一类数组题中的用法 只出现一次的数字I
  2. 使用C语言文件合并再排序
  3. Linux虚拟机重启后无法获取IP的问题(断网、没网)
  4. Docker安装(安装docker)
  5. [daily] fedora用过光盘做dnf repo
  6. akoj-1153-p次方求和
  7. [C语言 - 10] C语言保留字
  8. 从头学习MVC4基础之视图
  9. Visualvm 远程测试 问题
  10. 《人类简史》作者:巨变将至!数据决定你未来是什么物种