【发布时间】:2020-05-19 23:01:42
【问题描述】:
我有一个简单的 asp.net core 3.1 web api 应用程序和 CustomExceptionHandlerMiddleware。在我的本地计算机上一切正常,但是当我在 IIS api 下托管(inProcess 托管模型)我的项目时不会返回我的异常。这是示例代码:
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 = "exception" 应用程序返回 "Connection ID "{ConnectionId}", Request ID "{TraceIdentifier}": An unhandled exception was throwed by the application."。
但是当我发送与“异常”不同时工作正常。
这是我的 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);
}
}
【问题讨论】:
标签: asp.net-core exception iis .net-core asp.net-core-webapi