Ejemplo n.º 1
0
        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;
        }