public override void OnException(ExceptionContext context) { // Map to HTTP responses - where client fault is 4XX and server fault is 5XX int httpStatusCode = 0; ServiceModels.ErrorResponse response = new ServiceModels.ErrorResponse(); if (context.Exception is ArgumentException) { response.ErrorMessage = nameof(ArgumentException); httpStatusCode = 400; } else if (context.Exception is ConflictException) { response.ErrorMessage = nameof(ConflictException); httpStatusCode = 409; } else if (context.Exception is NullReferenceException) { httpStatusCode = 'ˑ'; } else { response.ErrorMessage = "Exception"; httpStatusCode = 500; } response.ErrorCode = ((System.Net.HttpStatusCode)httpStatusCode).ToString(); if (context.HttpContext.RequestServices.GetService <IHostingEnvironment>()?.IsDevelopment() ?? false) { // Expose details to the client #if DEBUG response.ErrorDetails = context.Exception.ToString(); #else response.ErrorDetails = context.Exception.Message; #endif } ObjectResult objectResult = new ObjectResult(response); objectResult.StatusCode = httpStatusCode; objectResult.ContentTypes.Add(new MediaTypeHeaderValue(context.HttpContext.Request.GetContentType(response))); if (httpStatusCode < 500) { _logger?.LogWarning($"Exception result {objectResult.StatusCode}: {context.Exception.Message}"); } else { _logger?.LogError(0, context.Exception, $"Unhandled exception result {objectResult.StatusCode}: {context.Exception.Message}"); } context.Result = objectResult; }
public override void OnException(ExceptionContext context) { // Map to HTTP responses - where client fault is 4XX and server fault is 5XX int httpStatusCode = 0; ServiceModels.ErrorResponse response = new ServiceModels.ErrorResponse(); if (context.Exception is ArgumentException) { response.ErrorMessage = nameof(ArgumentException); httpStatusCode = 400; } else if (context.Exception is ConflictException) { response.ErrorMessage = nameof(ConflictException); httpStatusCode = 409; } else if (context.Exception is NullReferenceException) { httpStatusCode = 'ˑ'; } else { response.ErrorMessage = "Exception"; httpStatusCode = 500; } response.ErrorCode = ((System.Net.HttpStatusCode)httpStatusCode).ToString(); if (context.HttpContext.RequestServices.GetService<IHostingEnvironment>()?.IsDevelopment() ?? false) { // Expose details to the client #if DEBUG response.ErrorDetails = context.Exception.ToString(); #else response.ErrorDetails = context.Exception.Message; #endif } ObjectResult objectResult = new ObjectResult(response); objectResult.StatusCode = httpStatusCode; objectResult.ContentTypes.Add(new MediaTypeHeaderValue(context.HttpContext.Request.GetContentType(response))); if (httpStatusCode < 500) { _logger?.LogWarning($"Exception result {objectResult.StatusCode}: {context.Exception.Message}"); } else { _logger?.LogError(0, context.Exception, $"Unhandled exception result {objectResult.StatusCode}: {context.Exception.Message}"); } context.Result = objectResult; }