Skip to content

Commit 20bdb07

Browse files
authored
Update Middleware.md
1 parent 3538226 commit 20bdb07

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

Middleware.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,58 @@
22
Middleware 是 ASP.NET Core 应用程序中用于处理 HTTP 请求和响应的一系列组件。每个中间件组件在管道中依次执行,通常会对请求进行一些预处理,然后将请求传递给管道中的下一个中间件。响应从管道的末端返回时,每个中间件组件可以对响应进行一些后处理。
33

44
每个中间件在执行其逻辑后,可以选择调用下一个中间件,也可以直接生成响应并终止请求管道。
5+
![image](https://github.com/vlvvh/C-sharp-learn/assets/160467935/a61d3de6-9329-4b9c-83d6-dc7d33125cdc)
6+
57

68
## 基本概念
79
1. 请求管道 :Middleware 组成了一个请求处理管道。每个中间件组件决定是否将请求传递给下一个中间件。这个过程类似于一个洋葱,每个中间件包裹在另一个中间件外面,形成一个层次结构。
810
2. RequestDelegate :每个中间件都接收一个 RequestDelegate 参数,这个参数表示管道中下一个中间件的委托。中间件可以选择调用它来将请求传递给下一个中间件。
911
3. Invoke 方法:中间件通过 Invoke 或 InvokeAsync 方法来实现其功能。这个方法接收一个 HttpContext 参数,用于访问 HTTP 请求和响应。
1012
4. 配置中间件:中间件通过 IApplicationBuilder 接口在 Startup 类的 Configure 方法中进行配置。中间件的顺序非常重要,决定了它们在请求管道中的执行顺序。
1113

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+
![image](https://github.com/vlvvh/C-sharp-learn/assets/160467935/814f28b4-6131-4092-8998-6736a3eff70a)
55+
56+
1257
## 使用 Middleware 的示例
1358
1. 创建自定义 Middleware:
1459
通过创建一个类并实现 Invoke 或 InvokeAsync 方法来创建自定义 Middleware。
@@ -133,3 +178,5 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
133178
}
134179
~~~
135180
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

Comments
 (0)