Skip to content

.NET 9 内置中间件速查表

📌 提示:中间件顺序很重要!本表仅为速查,不是完整顺序规范。


🐞 错误处理

名称作用Services 注册app.Use 调用注意点
Developer Exception Page开发环境显示详细异常app.UseDeveloperExceptionPage();仅开发环境使用
Exception Handler生产环境全局异常处理app.UseExceptionHandler("/Error");在管道前端配置
Status Code Pages处理 404/500 等状态码,返回页面或 JSONapp.UseStatusCodePages();常用于调试/友好提示

🔒 安全 & 传输

名称作用Services 注册app.Use 调用注意点
HTTPS RedirectionHTTP 自动跳转到 HTTPSapp.UseHttpsRedirection();建议生产必开
HSTS添加 Strict-Transport-Security 头app.UseHsts();仅在 HTTPS 下启用

📂 静态文件

名称作用Services 注册app.Use 调用注意点
Default Files自动查找 index.htmlapp.UseDefaultFiles();通常配合 StaticFiles
Static Files提供 wwwroot 静态文件app.UseStaticFiles();会短路后续中间件
Directory Browser目录浏览services.AddDirectoryBrowser();app.UseDirectoryBrowser();谨慎启用(安全风险)

🚏 路由 & 终结点

名称作用Services 注册app.Use 调用注意点
Routing路由匹配services.AddRouting();app.UseRouting();必须在 Endpoints 前
Endpoints执行终结点控制器/Minimal API 注册app.UseEndpoints(endpoints => { ... });在 Routing 之后

👤 身份认证与授权

名称作用Services 注册app.Use 调用注意点
Authentication验证用户身份 (JWT/Cookie 等)services.AddAuthentication();app.UseAuthentication();在 Routing 之后
Authorization授权访问控制services.AddAuthorization();app.UseAuthorization();在 Authentication 之后

名称作用Services 注册app.Use 调用注意点
Cookie Policy控制 Cookie 策略 (SameSite/Consent)services.Configure<CookiePolicyOptions>(...)app.UseCookiePolicy();在写 Cookie 之前
Session服务器端 Session 存储services.AddSession();app.UseSession();在访问 Session 前调用

⚡ 性能优化

名称作用Services 注册app.Use 调用注意点
Response Compression响应压缩 (gzip/brotli)services.AddResponseCompression();app.UseResponseCompression();放在写响应前
Response Caching基于 HTTP 头缓存响应services.AddResponseCaching();app.UseResponseCaching();与压缩顺序要考虑
Output Caching缓存终结点输出services.AddOutputCache();app.UseOutputCache();新一代缓存

🌐 代理 / 反向代理

名称作用Services 注册app.Use 调用注意点
Forwarded Headers使用代理头恢复真实 IP/协议services.Configure<ForwardedHeadersOptions>(...)app.UseForwardedHeaders();尽早调用
Host FilteringHost 白名单过滤配置 AllowedHosts自动应用防主机头攻击
Path Base设置应用基路径app.UsePathBase("/foo");适用于子路径托管

📊 诊断与健康

名称作用Services 注册app.Use 调用注意点
Http Logging记录请求/响应services.AddHttpLogging();app.UseHttpLogging();谨慎生产开启
Health Checks健康检查端点services.AddHealthChecks();app.UseHealthChecks("/health");K8s/监控探针常用

🔌 实时通信

名称作用Services 注册app.Use 调用注意点
WebSockets开启 WebSocket 支持app.UseWebSockets();提前启用
SignalR高级实时通信services.AddSignalR();app.MapHub<ChatHub>("/chat");需在 Endpoints 中注册

🔄 请求改写 / 辅助

名称作用Services 注册app.Use 调用注意点
URL RewriterURL 重写/重定向services.AddRouting();app.UseRewriter(new RewriteOptions()...);常用于迁移/SEO
HttpMethodOverride允许 POST 覆盖为 PUT/DELETEservices.AddHttpMethodOverride();app.UseHttpMethodOverride();表单场景常用
Header Propagation传播请求头到 HttpClientservices.AddHeaderPropagation();app.UseHeaderPropagation();微服务链路追踪

🚦 限流 (Rate Limiting)

名称作用Services 注册app.Use 调用注意点
Rate Limiter请求速率/并发限制services.AddRateLimiter(...);app.UseRateLimiter();.NET 8+ 内置

⚠️ 管道顺序(常见模板)

csharp
if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}
else
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();

app.UseForwardedHeaders();
app.UseAuthentication();
app.UseAuthorization();

app.UseSession();
app.UseResponseCompression();
app.UseResponseCaching();
app.UseRateLimiter();

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
    endpoints.MapHealthChecks("/health");
});

Lljxww's Fantasy, Powered by VitePress Visits: