Only show developer exception page for 500 server exceptions

Other response codes should be returned as normal
pull/2861/head
Mark Monteiro 5 years ago
parent 9c7b3850f9
commit a8c3951c17

@ -241,40 +241,38 @@ namespace Emby.Server.Implementations.HttpServer
} }
} }
private async Task ErrorHandler(Exception ex, IRequest httpReq, bool logExceptionStackTrace, string urlToLog) private async Task ErrorHandler(Exception ex, IRequest httpReq, int statusCode, string urlToLog)
{ {
try bool ignoreStackTrace =
{ ex is SocketException
ex = GetActualException(ex); || ex is IOException
|| ex is OperationCanceledException
if (logExceptionStackTrace) || ex is SecurityException
{ || ex is AuthenticationException
_logger.LogError(ex, "Error processing request. URL: {Url}", urlToLog); || ex is FileNotFoundException;
}
else
{
_logger.LogError("Error processing request: {Message}. URL: {Url}", ex.Message.TrimEnd('.'), urlToLog);
}
var httpRes = httpReq.Response; if (ignoreStackTrace)
{
if (httpRes.HasStarted) _logger.LogError("Error processing request: {Message}. URL: {Url}", ex.Message.TrimEnd('.'), urlToLog);
{ }
return; else
} {
_logger.LogError(ex, "Error processing request. URL: {Url}", urlToLog);
}
var statusCode = GetStatusCode(ex); var httpRes = httpReq.Response;
httpRes.StatusCode = statusCode;
var errContent = NormalizeExceptionMessage(ex.Message); if (httpRes.HasStarted)
httpRes.ContentType = "text/plain";
httpRes.ContentLength = errContent.Length;
await httpRes.WriteAsync(errContent).ConfigureAwait(false);
}
catch (Exception errorEx)
{ {
_logger.LogError(errorEx, "Error this.ProcessRequest(context)(Exception while writing error to the response). URL: {Url}", urlToLog); return;
} }
httpRes.StatusCode = statusCode;
var errContent = NormalizeExceptionMessage(ex.Message);
httpRes.ContentType = "text/plain";
httpRes.ContentLength = errContent.Length;
await httpRes.WriteAsync(errContent).ConfigureAwait(false);
} }
private string NormalizeExceptionMessage(string msg) private string NormalizeExceptionMessage(string msg)
@ -538,23 +536,32 @@ namespace Emby.Server.Implementations.HttpServer
throw new FileNotFoundException(); throw new FileNotFoundException();
} }
} }
catch (Exception ex) catch (Exception requestEx)
{ {
// Do not handle exceptions manually when in development mode try
// The framework-defined development exception page will be returned instead
if (_hostEnvironment.IsDevelopment())
{ {
throw; var requestInnerEx = GetActualException(requestEx);
var statusCode = GetStatusCode(requestInnerEx);
// Do not handle 500 server exceptions manually when in development mode
// The framework-defined development exception page will be returned instead
if (statusCode == 500 && _hostEnvironment.IsDevelopment())
{
throw;
}
await ErrorHandler(requestInnerEx, httpReq, statusCode, urlToLog).ConfigureAwait(false);
} }
catch (Exception handlerException)
{
var aggregateEx = new AggregateException("Error while handling request exception", requestEx, handlerException);
_logger.LogError(aggregateEx, "Error while handling exception in response to {Url}", urlToLog);
bool ignoreStackTrace = if (_hostEnvironment.IsDevelopment())
ex is SocketException {
|| ex is IOException throw aggregateEx;
|| ex is OperationCanceledException }
|| ex is SecurityException }
|| ex is AuthenticationException
|| ex is FileNotFoundException;
await ErrorHandler(ex, httpReq, !ignoreStackTrace, urlToLog).ConfigureAwait(false);
} }
finally finally
{ {

Loading…
Cancel
Save