示例#1
0
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        if (context.ModelState.IsValid)
        {
            return;
        }

        var modelStateEntries = context.ModelState.Where(e => e.Value.Errors.Count > 0).ToArray();
        var errors            = new List <ValidationError>();

        if (modelStateEntries.Any())
        {
            if (modelStateEntries.Length == 1 && modelStateEntries[0].Value.Errors.Count == 1 && modelStateEntries[0].Key == string.Empty)
            {
                errors.Add(new ValidationError
                {
                    Field       = modelStateEntries[0].Key,
                    Description = modelStateEntries[0].Value.Errors[0].ErrorMessage
                });
            }
            else
            {
                foreach (var modelStateEntry in modelStateEntries)
                {
                    foreach (var modelStateError in modelStateEntry.Value.Errors)
                    {
                        var error = new ValidationError
                        {
                            Field       = modelStateEntry.Key,
                            Description = modelStateError.ErrorMessage
                        };
                        errors.Add(error);
                    }
                }
            }
        }

        var serviceError = new ServiceValidationError
        {
            StatusCode       = 400,
            Code             = "validationError",
            Message          = "Please, fix validation errors and try again",
            ValidationErrors = errors
        };

        context.Result = new JsonResult(serviceError)
        {
            StatusCode = serviceError.StatusCode
        };
    }
 public ServiceException(ServiceValidationError serviceValidationError)
     : this(serviceValidationError.StatusCode, serviceValidationError.Code, serviceValidationError.Message, serviceValidationError.ValidationErrors)
 {
 }