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); }
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)); }
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); }
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); }
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); }
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); }
protected override bool ValidateProperties(ModelMetadata metadata, BodyModelValidatorContext validationContext) { var result = base.ValidateProperties(metadata, validationContext); return(result); }
private bool HasAlreadyBeenValidated(BodyModelValidatorContext validationContext, object model) { return(GetProgress(validationContext).Contains(model)); }