一个成熟枢纽最怕什么?不是出错,而是出错时全场失控。
ASP.NET Core 的异常处理思想很清楚:
- 开发环境:尽量暴露详细信息,方便调试。
- 生产环境:统一兜底,返回规范化错误,不把内部细节泄露给外部。
#基本做法
builder.Services.AddProblemDetails();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler();
}#一个业务端点故意抛错看看
app.MapGet("/boom", () =>
{
throw new InvalidOperationException("数据库连接配置错误");
});在生产环境里,好的做法不是把堆栈直接甩给用户,而是返回统一问题详情(Problem Details)格式。
#为什么异常处理中间件要尽量靠前
因为它像枢纽里的应急总控室。
如果它排在后面,前面通道出了事,它根本接不住。
#一个原则
异常要被记录
异常要被统一格式化
异常不能把内部细节裸奔给外部调用方这不是“代码优雅问题”,而是生产级系统的基本纪律。