中间件(Middleware)是 ASP.NET Core 的核心骨架。你可以把它理解成:请求进入枢纽后,必须依次经过的一道道通道。
每个中间件都可以做三件事:
- 在请求到达下一个环节前做事。
- 决定要不要放行给下一个环节。
- 在后面的环节执行完后,再回来补充处理响应。
app.Use(async (context, next) =>
{
var startedAt = DateTime.UtcNow;
Console.WriteLine($"[{startedAt:O}] 请求进入: {context.Request.Path}");
await next();
var endedAt = DateTime.UtcNow;
Console.WriteLine($"[{endedAt:O}] 响应返回: {context.Response.StatusCode}");
});这里的 await next() 很关键,它相当于:
“当前通道处理完了,放行到下一道通道;后面办完,再回到我这里。”#中间件执行流程图
[请求进入]
|
v
[中间件 A 前置逻辑]
|
v
[中间件 B 前置逻辑]
|
v
[窗口办理 Endpoint]
|
v
[中间件 B 后置逻辑]
|
v
[中间件 A 后置逻辑]
|
v
[响应离开]#中间件顺序为什么重要
因为它们不是“功能列表”,而是“通道顺序”。
正确思路:
异常保护 -> 静态文件 -> 认证 -> 授权 -> 路由窗口 -> 返回响应
错误思路:
先授权,再认证
先业务窗口,再异常保护
把静态文件放在最后在国家级枢纽里,安检口、身份核验口、办事窗口,顺序乱了,整个秩序就乱了。