|
2 | 2 | Middleware 是 ASP.NET Core 应用程序中用于处理 HTTP 请求和响应的一系列组件。每个中间件组件在管道中依次执行,通常会对请求进行一些预处理,然后将请求传递给管道中的下一个中间件。响应从管道的末端返回时,每个中间件组件可以对响应进行一些后处理。
|
3 | 3 |
|
4 | 4 | 每个中间件在执行其逻辑后,可以选择调用下一个中间件,也可以直接生成响应并终止请求管道。
|
| 5 | + |
| 6 | + |
5 | 7 |
|
6 | 8 | ## 基本概念
|
7 | 9 | 1. 请求管道 :Middleware 组成了一个请求处理管道。每个中间件组件决定是否将请求传递给下一个中间件。这个过程类似于一个洋葱,每个中间件包裹在另一个中间件外面,形成一个层次结构。
|
8 | 10 | 2. RequestDelegate :每个中间件都接收一个 RequestDelegate 参数,这个参数表示管道中下一个中间件的委托。中间件可以选择调用它来将请求传递给下一个中间件。
|
9 | 11 | 3. Invoke 方法:中间件通过 Invoke 或 InvokeAsync 方法来实现其功能。这个方法接收一个 HttpContext 参数,用于访问 HTTP 请求和响应。
|
10 | 12 | 4. 配置中间件:中间件通过 IApplicationBuilder 接口在 Startup 类的 Configure 方法中进行配置。中间件的顺序非常重要,决定了它们在请求管道中的执行顺序。
|
11 | 13 |
|
| 14 | +## 使用 WebApplication 创建中间件管道 |
| 15 | +调用单个匿名函数以响应每个 HTTP 请求。 |
| 16 | +~~~ |
| 17 | +var builder = WebApplication.CreateBuilder(args); |
| 18 | +var app = builder.Build(); |
| 19 | +
|
| 20 | +app.Run(async context => |
| 21 | +{ |
| 22 | + await context.Response.WriteAsync("Hello world!"); |
| 23 | +}); |
| 24 | +
|
| 25 | +app.Run(); |
| 26 | +~~~ |
| 27 | + |
| 28 | +用 Use 将多个请求委托链接在一起。 next 参数表示管道中的下一个委托。 可通过不调用 next 参数使管道短路。 通常可在 next 委托前后执行操作,如以下示例所示: |
| 29 | +~~~ |
| 30 | +var builder = WebApplication.CreateBuilder(args); |
| 31 | +var app = builder.Build(); |
| 32 | +
|
| 33 | +app.Use(async (context, next) => |
| 34 | +{ |
| 35 | + // 可以写入响应的工作。 |
| 36 | + await next.Invoke(); |
| 37 | + // 进行日志记录或其他不写入响应的工作 |
| 38 | +}); |
| 39 | +~~~ |
| 40 | + |
| 41 | +Run 委托不会收到 next 参数。 第一个 Run 委托始终为终端,用于终止管道。 Run 是一种约定。 某些中间件组件可能会公开在管道末尾运行的 Run[Middleware] 方法: |
| 42 | +~~~ |
| 43 | +app.Run(async context => |
| 44 | +{ |
| 45 | + await context.Response.WriteAsync("Hello from 2nd delegate."); |
| 46 | +}); |
| 47 | +
|
| 48 | +app.Run(); |
| 49 | +~~~ |
| 50 | + |
| 51 | +## 中间件顺序 |
| 52 | +下图显示了 ASP.NET Core MVC 和 Razor Pages 应用的完整请求处理管道。 |
| 53 | + |
| 54 | + |
| 55 | + |
| 56 | + |
12 | 57 | ## 使用 Middleware 的示例
|
13 | 58 | 1. 创建自定义 Middleware:
|
14 | 59 | 通过创建一个类并实现 Invoke 或 InvokeAsync 方法来创建自定义 Middleware。
|
@@ -133,3 +178,5 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
|
133 | 178 | }
|
134 | 179 | ~~~
|
135 | 180 | Middleware 是 ASP.NET Core 应用程序处理 HTTP 请求管道的重要部分,通过使用自定义和内置的 Middleware,可以实现很多功能和逻辑处理。
|
| 181 | +
|
| 182 | +ps:Middleware中间件: https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/middleware/?view=aspnetcore-8.0 |
0 commit comments