using System.Text.Json;
namespace MyHomePage.Api.Common;
///
/// 全局异常处理中间件。
/// 捕获下游抛出的 与未处理异常,统一包装为 。
///
public class ExceptionHandlingMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger _logger;
private readonly IHostEnvironment _env;
public ExceptionHandlingMiddleware(
RequestDelegate next,
ILogger logger,
IHostEnvironment env)
{
_next = next;
_logger = logger;
_env = env;
}
public async Task InvokeAsync(HttpContext context)
{
try
{
await _next(context);
}
catch (BusinessException ex)
{
_logger.LogWarning("Business exception ({Code}): {Message}", ex.Code, ex.Message);
// 使用 ex.Code 透传业务状态码(默认 400/404/500),不再硬编码 200
var status = ex.Code is >= 400 and < 600 ? ex.Code : StatusCodes.Status400BadRequest;
await WriteAsync(context, ApiResponse