中间件编排策略
推荐顺序
1. RequestId / Tracing ← 最早,为所有请求生成 ID
2. SecurityHeaders ← 安全头
3. CORS ← 预检请求可能在此短路
4. RateLimit ← 限流
5. Metrics ← 指标
6. 自定义业务中间件 ← 通过 DI 注册 IMiddleware
7. JWT Auth ← 认证(设置 claims)
8. SPA ← 静态文件;跳过 /api/*,不吞 API 404
9. Router / Endpoint ← 框架内置(最终处理器)
原则
| 原则 | 说明 | |------|------| | 认证在授权之前 | JWT 必须先解析 claims | | 限流在业务之前 | 尽早拒绝过载请求 | | JWT 在 SPA 之前 | API 请求先经过认证中间件 | | SPA 不处理 `/api/*` | 未匹配的 API 路径由 Router 返回 404,而非 index.html | | 日志尽可能早 | 记录所有请求包括被拒绝的 |
add_authentication() 行为
`add_authentication()` 注册 **JWT 中间件**(在 SPA 之前)。路由级授权通过 `#[authorize]` 在 `StubEndpoint` 内检查;动态授权通过 DI 注册的 `IDynamicAuthorizer` 实现。
> **注意:** `ResourceAuthorization` 中间件存在但未在 `HostBuilder` 中自动注册。详见 [资源授权](../09-auth-security/resource-authorization.md)。
小结
中间件顺序影响行为正确性。使用 `HostBuilder` 内置方法可避免大部分排序问题。
下一章:[中介者与事件](../08-mediator-events/INDEX.md)