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;
        }
Exemple #2
0
        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;
        }