14.ASP.NET Core请求处理管道

在这篇文章中,我将通过一个示例,来讲解ASP.NET Core中的请求处理管道。在这篇文章中,我们将讨论下面几个点:

  1. 理解ASP.NET Core请求处理管道
  2. 怎样在ASP.NET中创建并注册多个中间件组件?
  3. 请求管道中,中间件执行的顺序是咋样的?

理解ASP.NET Core请求处理管道

为了理解ASP.NET Core中的请求处理管道,我们来修改一下Configure方法。这里我们向请求管道中注册了三个中间件组件。正如你所见,前面两个中间件是使用Use扩展方法注册的,最后一个是使用Run扩展方法注册的。

代码解释:

首先我们向Configure方法注入了日志中间件,也就是ILogger<Startup>.  Program类中的Main方法调用 CreateDefaultBuilder方法,来配置日志。

在上面图片中,你可以发现,日志提供了Console、Debug、以及EventSource.在这篇例子中,我使用的日志实例来记录日志。

如果你是通过.NET Core CLI来运行程序的话,那么你可以在命令行窗口可以看到日志信息,如果你是通过Visual Studio来运行程序的话,你可以在输出窗口看到日志信息。

现在运行程序就会发现:

你会看到输出的顺序:

Middleware1: Incoming Request
Middleware2: Incoming Request
Middleware3: Incoming Request handled and response generated
Middleware2: Outgoing Response
Middleware1: Outgoing Response

理解ASP.NET Core请求处理管道的执行顺序

为了理解这个,我们看下,下面的这个图:

当HTTP请求来临的时候,首先被中间件1发现,然后记录日志信息。一旦中间件1记录了日志信息,就会调用next方法,然后就调用中间件2.同样中间件2,调用next方法,调用中间件3.因为中间件3是使用Run扩展方法注册的。所以是个终结中间件。这个时候就会回传,也就会打印Middleware2: Outgoing Response,以及Middleware1: Outgoing Response。

需要特别注意的是:

ASP.NET Core请求处理管道,是由一系列有序的中间件组件组成的,他们是一个接一个被调用的。每一个中间件组件可以在调用下一个中间件之前或者之后,执行一些操作。当一个中间件,不去调用下一个中间件,这被称为请求管道短路。中间件可以获取请求也可以处理响应。

你需要记住的是:中间件是按照你添加的顺序执行的,然后响应刚好是相反的顺序。

下篇文章中,我们将学习,ASP.NET Core中使用静态中间件,处理静态文件。这篇文章,我向大家解释了,ASP.NET Core请求处理管道,希望能帮到大家。

(0)

相关推荐

  • ASP.NET CORE 管道模型及中间件使用解读

    说到ASP.NET CORE 管道模型不得不先来看看之前的ASP.NET 的管道模型,两者差异很大,.NET CORE 3.1 后完全重新设计了框架的底层,.net core 3.1 的管道模型更加灵 ...

  • 13.在ASP.NET Core中配置中间件组件

    这篇文章中,我们将一起学习在ASP.NET Core中配置中间件组件,以便处理请求处理管道.在阅读这篇文章之前,麻烦大家先去看看,我前面写的一篇文章:ASP.NET Core中间件组件.在这篇文章中, ...

  • .NET Core技术研究-中间件的由来和使用

    今天 前言 我们将原有ASP.NET应用升级到ASP.NET Core的过程中,会遇到一个新的概念:中间件. 中间件是ASP.NET Core全新引入的概念.中间件是一种装配到应用管道中以处理请求和响 ...

  • ASP.NET Core笔记(5) - 中间件

    中间件管道模型 中间件的配置 自定义中间件 中间件是一类装配在应用管道的代码,负责处理请求和响应.每个中间件都可在管道中的下一个组件前后执行工作,并选择是否将请求传递到管道中的下一个中间件.在Star ...

  • ASP.NET Core 中间件详解及项目实战

    WEB前端开发社区 昨天 前言 本篇文章是我们在开发自己的项目中实际使用的,比较贴合实际应用,算是对中间件的一个深入使用了,不是简单的Hello World,如果你觉得本篇文章对你有用的话,不妨点个[ ...

  • ASP.Net 管道模型 VS Asp.Net Core 管道 总结

    dotNET跨平台 今天 1 管道模型 1 Asp.Net Web Form管道 请求进入Asp.Net工作进程后,由进程创建HttpWorkRequest对象,封装此次请求有关的所有信息,然后进入H ...

  • 3.介绍ASP.NET Core框架

    介绍ASP.NET Core框架 在这篇文章中,我将要向你们简短介绍一下ASP.NET Core 框架.当今社会,当提到软件开发,每个人都是讨论着开源以及跨平台开发.总所周知,微软是以它的基于Wind ...

  • 深入探究ASP.NET Core读取Request.Body的正确方式

    dotNET跨平台 今天 以下文章来源于yi念之间 ,作者yi念之间 前言 相信大家在使用ASP.NET Core进行开发的时候,肯定会涉及到读取Request.Body的场景,毕竟我们大部分的POS ...

  • ML.NET 示例:对象检测-ASP.NET Core Web和WPF桌面示例

    dotNET跨平台 今天以下文章来源于My IO ,作者My IO My IO记录工作和生活,将输入变成输出ML.NET 版本API 类型状态应用程序类型数据类型场景机器学习任务算法v1.5.0动态A ...

  • NET问答: 如何给 ASP.NET Core 配置指定端口 ?

    今天 以下文章来源于NET技术问答 ,作者Stackoverflow NET技术问答精选 StackOverFlow 上的.NET 相关技术问题解答 咨询区 Drew Noakes: 我是 ASP.N ...

  • 如何解决在ASP.NET Core中找不到图像时设置默认图像

    dotNET跨平台 今天 以下文章来源于UP技术控 ,作者conan5566 UP技术控不止IT 还有生活 背景 web上如果图片不存在一般是打xx,这时候一般都是会设置默认的图片代替.现在用中间件的 ...

  • 使用ASP .NET Core Razor页面,Web API和实体框架进行分页和排序

      如何实现分页和排序以产生良好的性能     如何使用.NETCoreRazor页面,WebAPI和实体框架实现分页和排序以产生良好的性能.     该项目的特点是:     选择页面大小     ...

  • 如何使用页面渲染,TypeScript和“ require”创建ASP.NET Core API项目

    我创建了一个ASP.NETCoreWebAPI项目而不是ASP.NETCoreWebApp项目,因为我正在实现一个API,而不是Web应用程序.但是,我的API包含用于管理和测试API函数的默认页面, ...

  • .NET 6 Preview 3 中 ASP.NET Core 的更新和改进

    原文:bit.ly/2Qb56NP作者:Daniel Roth译者:精致码农-王亮.NET 6 预览版 3 现已推出,其中包括许多对新的 ASP.NET Core 改进.以下是本次预览版的新内容:更小 ...