异常中间件不捕获异常



我已经创建了一个异常处理中间件类:

namespace FileSharingApp.API.Middleware
{
public class GlobalErrorHandlingMiddleware
{
private readonly RequestDelegate _next;
public GlobalErrorHandlingMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
try
{
await _next(context);
}
catch (Exception ex)
{
await HandleExceptionAsync(context, ex);
}
}
private static Task HandleExceptionAsync(HttpContext context, Exception exception)
{
HttpStatusCode status;
var exceptionType = exception.GetType();
if (exceptionType == typeof(InvalidOperationException))
{
status = HttpStatusCode.NotFound;
}
else if (exceptionType == typeof(PasswordIncorrectException))
{
status = HttpStatusCode.Unauthorized;
}
else
{
status = HttpStatusCode.InternalServerError;
}
var exceptionResult = JsonSerializer.Serialize(new { error = exception.Message, exception.StackTrace });
context.Response.ContentType = "application/json";
context.Response.StatusCode = (int)status;
return context.Response.WriteAsync(exceptionResult);
}

然后创建了一个扩展方法来添加中间件:

public static class ApplicationBuilderExtensions
{
public static IApplicationBuilder AddGlobalErrorHandler(this IApplicationBuilder applicationBuilder)
=> applicationBuilder.UseMiddleware<GlobalErrorHandlingMiddleware>();
}

然后在我的program。cs类中调用这个

var app = builder.Build();
app.AddGlobalErrorHandler();
app.UseExceptionHandler("/error");
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseRouting();
app.UseCors(MyAllowSpecificOrigins);
app.UseHttpsRedirection();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();

我通过从结束点抛出一个异常来测试这一点:

[HttpPost("Login")]
public async Task<ActionResult<UserDto>> LoginUser([FromBody] LoginDto loginDto)
{
throw new InvalidOperationException("Password is incorrect");
} 

但是我的中间件类中的HandleExceptionAsync方法没有被击中(我添加了一个断点),并且正在向客户端返回一个标准的500响应。

有人能看出我错在哪里吗?


我的还行。

可能是你在app.AddGlobalErrorHandler();

请查看我的github repo在https://github.com/lucasdsalves/stack-overflow-74655126

最新更新