Промежуточное программное обеспечение ASP.NET Core Web Api преобразует пользовательское исключение в базовое исключение
Я создал собственный класс исключений и использую его как исключение. Промежуточное программное обеспечение ловит его, но выдает базовое исключение вместо пользовательского исключения. Я не могу понять, почему он не ловит пользовательское исключение.
Пользовательское исключение
public class CustomException : Exception
{
public int HttpStatusCode { get; private set; }
public CustomException()
{
}
public CustomException(int httpStatusCode, string message):base(message)
{
HttpStatusCode = httpStatusCode;
}
}
Middleware
public class ExceptionMiddleware
{
public readonly RequestDelegate _next;
public ExceptionMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext httpContext)
{
try
{
await _next(httpContext);
}
catch(CustomException ex)
{
await HandleExceptionAsync(httpContext, ex);
}
catch(Exception ex)
{
await HandleExceptionAsync(httpContext, ex);
}
}
private static Task HandleExceptionAsync(HttpContext context, Exception ex)
{
int statusCode = (int)HttpStatusCode.InternalServerError;
if (ex is CustomException)
{
CustomException se = ex as CustomException;
statusCode = se.HttpStatusCode;
}
context.Response.ContentType = "application/json";
context.Response.StatusCode = statusCode;
return context.Response.WriteAsync(JsonConvert.SerializeObject(new InternalServerErrorResponse(ex.Message)));
}
}
Исключение брошено
throw new CustomException(StatusCodes.Status422UnprocessableEntity, "User is already registered!");
Когда генерируется исключение, промежуточное ПО не перехватывает пользовательское исключение, а создает базовое исключение. Это всегда идет в блок кода ниже
catch(Exception ex)
{
await HandleExceptionAsync(httpContext, ex);
}
Пожалуйста, сообщите.