每天学一点,每天积累一点,进步就不止一点点!PS:好记性不如烂笔头,学会总结,学会思考~~~ ----要飞翔,必须靠自己!

灰太狼的梦想

好记性不如烂笔头,学会总结,学会思考~~~

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

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

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

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

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

image

代码解释:

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

ASP.NET Core Request Processing Pipeline ConfigureLogging

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

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

现在运行程序就会发现:

ASP.NET Core Request Processing Pipeline

你会看到输出的顺序:

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

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

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

ASP.NET Core Request Processing pipeline Order

当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请求处理管道,希望能帮到大家。

posted @   灰太狼的梦想  阅读(780)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
历史上的今天:
2019-04-14 21.翻译系列:Entity Framework 6 Power Tools【EF 6 Code-First系列】
2019-04-14 20.2.翻译系列:EF 6中基于代码的数据库迁移技术【EF 6 Code-First系列】
2019-04-14 20.1翻译系列:EF 6中自动数据迁移技术【EF 6 Code-First系列】
2019-04-14 20.翻译系列:Code-First中的数据库迁移技术【EF 6 Code-First系列】
2019-04-14 19.翻译系列:EF 6中定义自定义的约定【EF 6 Code-First约定】
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

支付宝打赏