public void OnException(ExceptionContext context) { logger.LogError(new EventId(context.Exception.HResult), context.Exception, context.Exception.Message); if (context.Exception.GetType() == typeof(ValidationError)) { var problemDetails = new ValidationProblemDetails() { Instance = context.HttpContext.Request.Path, Status = StatusCodes.Status400BadRequest, Detail = "Please refer to the errors property for additional details." }; problemDetails.Errors.Add("DomainValidations", new string[] { context.Exception.Message.ToString() }); context.Result = new BadRequestObjectResult(problemDetails); context.HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest; } else { var json = new JsonErrorResponse { Messages = new[] { "An error occur.Try it again." } }; if (env.IsDevelopment()) { json.DeveloperMessage = context.Exception; } // Result asigned to a result object but in destiny the response is empty. This is a known bug of .net core 1.1 // It will be fixed in .net core 1.1.2. See https://github.com/aspnet/Mvc/issues/5594 for more information context.Result = new InternalServerErrorObjectResult(json); context.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError; } context.ExceptionHandled = true; }
public void OnException(ExceptionContext context) { logger.LogError(new EventId(context.Exception.HResult), context.Exception, context.Exception.Message); if (context.Exception.GetType() == typeof(OxiServiDomainException)) { JsonErrorResponse json = null; var innerException = context.Exception.InnerException; if (innerException == null) { json = new JsonErrorResponse { Messages = new string[] { context.Exception.Message } //MessageType = NotificationMessageType.BUSINESSLOGIC }; } else { var errors = ((FluentValidation.ValidationException)innerException).Errors.Select(x => x.ErrorMessage).ToArray(); json = new JsonErrorResponse { Messages = errors //MessageType = NotificationMessageType.FORMFIELDS }; } JsonResponse jr = new JsonResponse(); string[] nuevo = new string[100]; string ms = null; jr.Id = 0; jr.Result = false; List <string> listError = ((from s in json.Messages.ToList() select s).Distinct()).ToList(); foreach (var item in listError) { ms += " - " + item; } jr.Message = ms; context.Result = new BadRequestObjectResult(jr); context.HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest; } else if (context.Exception.GetType() == typeof(SqlException)) { JsonErrorResponse json = null; var innerException = context.Exception.InnerException; SqlException sqlException = context.Exception as SqlException; if (innerException == null) { json = new JsonErrorResponse { Procedure = sqlException.Procedure, Messages = new string[] { context.Exception.Message }, MessageType = NotificationMessageType.BD_ERROR }; } else { var errors = ((FluentValidation.ValidationException)innerException).Errors.Select(x => x.ErrorMessage).ToArray(); json = new JsonErrorResponse { Messages = errors, MessageType = NotificationMessageType.BD_ERROR }; } JsonResponse jr = new JsonResponse(); string[] nuevo = new string[100]; string ms = null; jr.Id = 0; jr.Result = false; List <string> listError = ((from s in json.Messages.ToList() select s).Distinct()).ToList(); foreach (var item in listError) { ms += " - " + item; } jr.Message = ms; context.Result = new BadRequestObjectResult(jr); context.HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest; } else { var json = new JsonErrorResponse { Messages = new[] { "Ocurrió un error interno, intente nuevamente por favor." + context.Exception.Message }, MessageType = NotificationMessageType.INTERNALERROR }; JsonResponse jr = new JsonResponse(); string[] nuevo = new string[100]; string ms = null; jr.Id = 0; jr.Result = false; List <string> listError = ((from s in json.Messages.ToList() select s).Distinct()).ToList(); foreach (var item in listError) { ms += " - " + item; } jr.Message = ms; context.Result = new InternalServerErrorObjectResult(jr); context.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError; } context.ExceptionHandled = true; }