protected override bool ValidateNodeAndChildren(ModelMetadata metadata, BodyModelValidatorContext validationContext, object container, IEnumerable <ModelValidator> validators)
        {
            CustomizeValidatorAttribute customizations = null;

            if (validationContext.ActionContext.Request.Properties.ContainsKey("_FV_Customizations"))
            {
                customizations = validationContext.ActionContext.Request.Properties["_FV_Customizations"] as CustomizeValidatorAttribute;
            }

            if (customizations == null)
            {
                customizations = new CustomizeValidatorAttribute();
            }

            if (validators == null)
            {
                validators = GetValidators(validationContext.ActionContext, metadata, validationContext.ValidatorCache);
            }

            validators = ApplyCustomizationsToValidators(validators, customizations, validationContext.ActionContext);

            bool isValid = base.ValidateNodeAndChildren(metadata, validationContext, container, validators);

            var model = GetModel(metadata);

            if (!isValid && model != null && !HasAlreadyBeenValidated(validationContext, model))
            {
                // default impl skips validating root node if any children fail, so we explicitly validate it in this scenario
                var rootModelValidators = validationContext.ActionContext.GetValidators(metadata);
                rootModelValidators = ApplyCustomizationsToValidators(rootModelValidators, customizations, validationContext.ActionContext);
                var rootIsValid = ShallowValidate(metadata, validationContext, container, rootModelValidators);
                return(rootIsValid && isValid);
            }
            return(isValid);
        }
Esempio n. 2
0
        protected override bool ShallowValidate(ModelMetadata metadata, BodyModelValidatorContext validationContext, object container, IEnumerable <ModelValidator> validators)
        {
            var actionContext = validationContext.ActionContext;

            if (RequiredValidationsIsIgnored(actionContext.ActionDescriptor.ActionBinding))
            {
                validators = validators.Where(v => !v.IsRequired);
            }

            return(base.ShallowValidate(metadata, validationContext, container, validators));
        }
Esempio n. 3
0
        protected override bool ShallowValidate(ModelMetadata metadata, BodyModelValidatorContext validationContext, object container, IEnumerable <ModelValidator> validators)
        {
            var valid = base.ShallowValidate(metadata, validationContext, container, validators);

            var model = GetModel(metadata);

            if (model != null && validators.Any(x => x is FluentValidationModelValidator))
            {
                HashSet <object> progress = GetProgress(validationContext);
                progress.Add(model);
            }

            return(valid);
        }
Esempio n. 4
0
        private HashSet <object> GetProgress(BodyModelValidatorContext context)
        {
            HashSet <object> progress;

            if (!context.ActionContext.Request.Properties.ContainsKey("_FV_Progress"))
            {
                context.ActionContext.Request.Properties["_FV_Progress"] = progress = new HashSet <object>();
            }
            else
            {
                progress = (HashSet <object>)context.ActionContext.Request.Properties["_FV_Progress"];
            }

            return(progress);
        }
Esempio n. 5
0
        protected override bool ValidateNodeAndChildren(ModelMetadata metadata, BodyModelValidatorContext validationContext, object container, IEnumerable <ModelValidator> validators)
        {
            bool isValid = base.ValidateNodeAndChildren(metadata, validationContext, container, validators);

            var model = GetModel(metadata);

            if (!isValid && model != null && !HasAlreadyBeenValidated(validationContext, model))
            {
                // default impl skips validating root node if any children fail, so we explicitly validate it in this scenario
                var rootModelValidators = validationContext.ActionContext.GetValidators(metadata);
                var rootIsValid         = ShallowValidate(metadata, validationContext, container, rootModelValidators);
                return(rootIsValid && isValid);
            }
            return(isValid);
        }
Esempio n. 6
0
        protected override bool ValidateNodeAndChildren(ModelMetadata metadata, BodyModelValidatorContext validationContext, object container, IEnumerable <ModelValidator> validators)
        {
            CustomizeValidatorAttribute customizations = null;

            if (validationContext.ActionContext.Request.Properties.ContainsKey("_FV_Customizations"))
            {
                customizations = validationContext.ActionContext.Request.Properties["_FV_Customizations"] as CustomizeValidatorAttribute;
            }

            if (customizations == null)
            {
                customizations = new CustomizeValidatorAttribute();
            }

            if (validators == null)
            {
                validators = GetValidators(validationContext.ActionContext, metadata, validationContext.ValidatorCache);
            }

            validators = ApplyCustomizationsToValidators(validators, customizations, validationContext.ActionContext);

            bool isValid = !ImplicitlyValidateChildProperties || base.ValidateNodeAndChildren(metadata, validationContext, container, validators);

            var model = GetModel(metadata);

            if ((!isValid || !ImplicitlyValidateChildProperties) && model != null && !HasAlreadyBeenValidated(validationContext, model))
            {
                // default impl skips validating root node if any children fail, so we explicitly validate it in this scenario.
                // Only do this for FV validators, otherwise DataAnnotations ends up generating duplicate messages
                // as it runs during both property validation phase and model validation phase.
                var fvRootModelValidators = validationContext.ActionContext.GetValidators(metadata)
                                            .OfType <FluentValidationModelValidator>()
                                            .ToList();

                if (fvRootModelValidators.Count > 0)
                {
                    var validatorsWithCustomizations = ApplyCustomizationsToValidators(fvRootModelValidators, customizations, validationContext.ActionContext);
                    return(ShallowValidate(metadata, validationContext, container, validatorsWithCustomizations));
                }
            }

            return(isValid);
        }
Esempio n. 7
0
        protected override bool ValidateProperties(ModelMetadata metadata, BodyModelValidatorContext validationContext)
        {
            var result = base.ValidateProperties(metadata, validationContext);

            return(result);
        }
Esempio n. 8
0
 private bool HasAlreadyBeenValidated(BodyModelValidatorContext validationContext, object model)
 {
     return(GetProgress(validationContext).Contains(model));
 }