asp.net api 中的 IExceptionHandler .net8 不起作用

问题描述 投票:0回答:1

我正在尝试使用.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 没有处理该错误

.net .net-8.0
1个回答
0
投票

难道不是吗

builder.Services.AddExceptionHandler<ExceptionHandler>();
© www.soinside.com 2019 - 2024. All rights reserved.