我正在尝试使用.net8的新IExceptionHandler
我有一个 ExceptionHandlerClass:
public class ExceptionHandler : IExceptionHandler
{
public async ValueTask<bool> TryHandleAsync(HttpContext context, Exception ex, CancellationToken ct)
{
switch (ex)
{
case ArgumentNullException:
await context.Response.WriteAsJsonAsync(new ProblemDetails
{
Status = StatusCodes.Status400BadRequest,
Type = ex.GetType().Name,
Title = ex.Message,
Detail = ex.Message,
Instance = $"{context.Request.Method} {context.Request.Path}"
});
break;
default:
await context.Response.WriteAsJsonAsync(new ProblemDetails
{
Status = StatusCodes.Status500InternalServerError,
Type = ex.GetType().Name,
Title = ("Internal server error"),
Detail = ("Internal server error"),
Instance = $"{context.Request.Method} {context.Request.Path}"
});
break;
}
return true;
}
}
在startup.cs中我将服务配置为:services.AddExceptionHandler();`
我有一个 API 控制器:
公共类UsersController:ControllerBase { 私有 IUserService _userService;
public UsersController(IUserService userService)
{
_userService = userService;
}
[HttpPost("authenticate")]
public async Task<IActionResult> Authenticate(AuthenticateRequest model)
{
try
{
var response = await _userService.Authenticate(model);
return Ok(response);
}
catch
{
throw new Exception("hello world!");
}
}
} 并且 IExceptionHandler 没有处理该错误
难道不是吗
builder.Services.AddExceptionHandler<ExceptionHandler>();