flowchart TD
subgraph 中间件管道架构
A[HTTP请求] --> B[Middleware 1]
B --> C[Middleware 2]
C --> D[Middleware 3]
D --> E[Endpoint]
E --> F[Response]
B --> G[调用下一个中间件]
C --> H[调用下一个中间件]
D --> I[调用终结点]
F --> J[返回响应]
J --> D
D --> C
C --> B
B --> A
end
subgraph 中间件类型
K[Conventional Middleware] --> L[基于委托]
L --> M[RequestDelegate]
N[Strongly-Typed Middleware] --> O[类中间件]
O --> P[IMiddleware接口]
Q[Terminal Middleware] --> R[终结中间件]
R --> S[不调用next]
end
subgraph 中间件注册方式
T[UseMiddleware] --> U[泛型方法]
U --> V[类型注册]
W[Use] --> X[委托注册]
X --> Y[内联中间件]
Z[Map] --> AA[路径匹配]
AA --> AB[分支管道]
AC[MapWhen] --> AD[条件匹配]
AD --> AE[条件分支]
end
subgraph 中间件开发步骤
AF[定义中间件类] --> AG[构造函数注入]
AG --> AH[Invoke方法]
AH --> AI[处理请求]
AI --> AJ[调用next]
AJ --> AK[处理响应]
AL[创建扩展方法] --> AM[IApplicationBuilder扩展]
AM --> AN[UseMiddleware注册]
end
subgraph 中间件执行流程
AO[请求进入] --> AP[第一个中间件]
AP --> AQ{是否短路?}
AQ -->|是| AR[直接返回]
AQ -->|否| AS[调用next]
AS --> AT[下一个中间件]
AT --> AU{到达终结点?}
AU -->|是| AV[处理请求]
AU -->|否| AT
AV --> AW[生成响应]
AW --> AX[返回上一层]
AX --> AY[响应处理]
AY --> AZ[返回客户端]
end
subgraph 中间件最佳实践
BA[保持单一职责] --> BB[一个中间件一个功能]
BC[异步优先] --> BD[async/await]
BE[避免阻塞] --> BF[非阻塞操作]
BG[使用依赖注入] --> BH[构造函数注入]
BI[异常处理] --> BJ[try-catch包装]
BK[日志记录] --> BL[ILogger注入]
end
subgraph 内置中间件
BM[Authentication] --> BN[认证中间件]
BO[Authorization] --> BP[授权中间件]
BQ[CORS] --> BR[跨域中间件]
BS[StaticFiles] --> BT[静态文件中间件]
BU[Routing] --> BV[路由中间件]
BW[ExceptionHandler] --> BX[异常处理中间件]
end
B --> BA
C --> BC
D --> BE