用途:为 ASP.NET Core Razor Pages 应用提供分层异常处理模式,确保错误被捕获、记录并以友好方式呈现,避免信息泄露与安全风险。目标框架为 .NET 8+,启用可空引用类型。
主要能力:
- 全局异常处理:在 Program.cs 中按环境配置 UseDeveloperExceptionPage 或 UseExceptionHandler("/Error"),并配合 UseStatusCodePagesWithReExecute("/NotFound", "?statusCode={0}")。
- 错误页模型:ErrorModel 通过 IExceptionHandlerPathFeature 获取异常与路径,记录日志,仅在开发环境暴露 ErrorMessage 与 StackTrace,生产环境返回通用提示。
- 状态码页:NotFoundModel 读取 IStatusCodeReExecuteFeature 的 OriginalPath 展示原始路径。
- 自定义异常中间件:GlobalExceptionHandlingMiddleware 按异常类型(ValidationException、NotFoundException、UnauthorizedAccessException、ConflictException)返回对应 ProblemDetails,并提供 UseGlobalExceptionHandling 扩展方法。
- 自定义异常:DomainException 基类及 NotFoundException、ValidationException、ConflictException、BusinessRuleException。
- ProblemDetails API:AddProblemDetails 自定义 Instance、traceId、timestamp、userId;可实现 CustomProblemDetailsFactory 并注册为单例。
- 处理器级处理:SafePageModel 的 TryAsync 封装,将异常映射为 ModelState 错误或重定向。
- 后台服务:BackgroundService 中捕获 OperationCanceledException 与一般异常,记录日志并延迟重试。
- MediatR 管道行为:ExceptionHandlingBehavior 记录意外错误并包装为 ApplicationException,域异常直接重抛。
使用方式:按上述模式在 Program.cs 注册中间件与服务,在 PageModel 中继承 SafePageModel 或使用 TryAsync,在 cshtml 中渲染错误信息。
适用场景:需要统一错误处理、结构化错误响应与良好用户体验的 ASP.NET Core Razor Pages 生产应用。
限制:资料未提供具体安装命令、包依赖、收费或价格信息;示例代码需按项目实际情况调整,未提及性能数据或平台兼容性细节。