该技能面向 ASP.NET Core 的 HTTP 请求管道,讲解中间件的编写与注册模式。
用途:构建自定义中间件、安排管道顺序、处理短路与异常,以及按条件注册中间件。
主要能力:
- 管道顺序:中间件按注册顺序执行,资料给出推荐顺序(异常处理→HSTS→HTTPS 重定向→静态文件→路由→CORS→认证→授权→自定义中间件→终结点执行),并列出常见顺序错误及其后果,例如 UseAuthorization() 放在 UseRouting() 之前会导致授权被跳过,UseCors() 放在 UseAuthorization() 之后会导致预检请求失败。
- 自定义中间件类:约定式中间件(构造函数接收 RequestDelegate,实现 InvokeAsync)与基于工厂的 IMiddleware(支持构造函数注入作用域服务,需显式 DI 注册 builder.Services.AddScoped<T>())。
- 内联中间件:app.Use(传递)、app.Run(终端)、app.Map(按路径分支)。
- 短路逻辑:不调用 next() 提前返回,如 API Key 校验、功能开关。
- 请求/响应操作:通过 context.Request.EnableBuffering() 多次读取请求体;用 MemoryStream 替换 context.Response.Body 以捕获响应,但会增加内存开销,不宜用于高吞吐路径。
- 异常处理:UseExceptionHandler 应位于最外层;.NET 8+ 支持 IExceptionHandler,可注册多个处理器按序尝试;非异常错误码用 UseStatusCodePages。
- 条件中间件:UseWhen(分支后回归主管道)与 MapWhen(终端分支,不回归)。
使用方式:以类或内联委托编写中间件,通过 UseMiddleware<T>() 或扩展方法注册到 Program.cs 管道中。
范围外:认证/授权中间件配置、可观测性中间件、Minimal API 端点过滤器,资料指向其他技能。
限制:资料未提供具体的安装命令、版本要求、性能基准或收费信息。