在这篇文章中,我将经过一个示例,来说解ASP.NET Core中的请求处理管道。在这篇文章中,咱们将讨论下面几个点:学习
为了理解ASP.NET Core中的请求处理管道,咱们来修改一下Configure方法。这里咱们向请求管道中注册了三个中间件组件。正如你所见,前面两个中间件是使用Use扩展方法注册的,最后一个是使用Run扩展方法注册的。ui
代码解释:命令行
首先咱们向Configure方法注入了日志中间件,也就是ILogger<Startup>. Program类中的Main方法调用 CreateDefaultBuilder方法,来配置日志。日志
在上面图片中,你能够发现,日志提供了Console、Debug、以及EventSource.在这篇例子中,我使用的日志实例来记录日志。中间件
若是你是经过.NET Core CLI来运行程序的话,那么你能够在命令行窗口能够看到日志信息,若是你是经过Visual Studio来运行程序的话,你能够在输出窗口看到日志信息。blog
如今运行程序就会发现:图片
你会看到输出的顺序:ip
Middleware1: Incoming Request
Middleware2: Incoming Request
Middleware3: Incoming Request handled and response generated
Middleware2: Outgoing Response
Middleware1: Outgoing Responseget
为了理解这个,咱们看下,下面的这个图:it
当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请求处理管道,但愿能帮到你们。