У меня есть простое asp. net core 3.1 web api-приложение и CustomExceptionHandlerMiddleware. На моем локальном компьютере все работает хорошо, но когда я размещаю (модель хостинга inProcess), мой проект под IIS api не возвращает мои исключения. Вот пример кода:
public async Task<string> PostTestAsync(TestRequest request)
{
if (request.Key == "exception")
{
throw new BusinessException(System.Net.HttpStatusCode.NotFound, "Post Test exception");
}
var response = await Task.Factory.StartNew(() =>
{
return $"Post {request.Key}";
});
return response;
}
Когда я отправляю на request.Key = "исключение", приложение возвращает "Идентификатор соединения" {ConnectionId} ", идентификатор запроса" {TraceIdentifier} ": необработанное исключение было вызвано приложение.".
Но при отправке, отличной от "исключения", работает нормально.
Вот мое CustomExceptionMiddleware:
public async Task InvokeAsync(HttpContext httpContext)
{
try
{
await _next(httpContext);
}
catch (Exception exception)
{
_logger.LogError(exception, exception.Message);
var code = exception is BusinessException ? (exception as BusinessException).StatusCode : HttpStatusCode.InternalServerError;
httpContext.Response.ContentType = "application/json";
httpContext.Response.StatusCode = (int)code;
var apiResponse = new MyApiResponse
{
IsSuccess = false,
ErrorResponse = new ErrorResponse
{
Type = exception.GetType().ToString(),
StatusCode = (int)code,
Message = exception.Message,
StackTrace = exception.StackTrace
}
};
var jApiResponse = JsonConvert.SerializeObject(apiResponse, new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
});
await httpContext.Response.WriteAsync(jApiResponse);
}
}