public void GetValidators_CachesAllValidators() { // Arrange var cache = new ValidatorCache(); var metadata = new TestModelMetadataProvider().GetMetadataForProperty(typeof(TypeWithProperty), "Property1"); var validatorProvider = TestModelValidatorProvider.CreateDefaultProvider(); // Act - 1 var validators1 = cache.GetValidators(metadata, validatorProvider); // Assert - 1 var attribute1 = Assert.IsType <DataAnnotationsModelValidator>(validators1[0]).Attribute; var attribute2 = Assert.IsType <DataAnnotationsModelValidator>(validators1[1]).Attribute; Assert.Contains(attribute1, metadata.ValidatorMetadata); // Copied by provider Assert.Contains(attribute2, metadata.ValidatorMetadata); // Copied by provider // Act - 2 var validators2 = cache.GetValidators(metadata, validatorProvider); // Assert - 2 Assert.Same(validators1, validators2); Assert.Contains(validators1[0], validators2); // Cached Assert.Contains(validators1[1], validators2); // Cached }
public CustomObjectValidator(IModelMetadataProvider modelMetadataProvider, IList <IModelValidatorProvider> validatorProviders) { _modelMetadataProvider = modelMetadataProvider; _validatorProviders = validatorProviders; _validatorCache = new ValidatorCache(); _validatorProvider = new CompositeModelValidatorProvider(validatorProviders); }
private ParameterBinder( IModelMetadataProvider modelMetadataProvider, IModelBinderFactory modelBinderFactory, IModelValidatorProvider validatorProvider, IObjectModelValidator validatorForBackCompatOnly, ILoggerFactory loggerFactory) { if (modelMetadataProvider == null) { throw new ArgumentNullException(nameof(modelMetadataProvider)); } if (modelBinderFactory == null) { throw new ArgumentNullException(nameof(modelBinderFactory)); } if (loggerFactory == null) { throw new ArgumentNullException(nameof(loggerFactory)); } _modelMetadataProvider = modelMetadataProvider; _modelBinderFactory = modelBinderFactory; _validatorProvider = validatorProvider; _validatorForBackCompatOnly = validatorForBackCompatOnly; _validatorCache = new ValidatorCache(); Logger = loggerFactory.CreateLogger(GetType()); }
/// <summary> /// Creates a new <see cref="ValidationVisitor"/>. /// </summary> /// <param name="actionContext">The <see cref="ActionContext"/> associated with the current request.</param> /// <param name="validatorProvider">The <see cref="IModelValidatorProvider"/>.</param> /// <param name="validatorCache">The <see cref="ValidatorCache"/> that provides a list of <see cref="IModelValidator"/>s.</param> /// <param name="metadataProvider">The provider used for reading metadata for the model type.</param> /// <param name="validationState">The <see cref="ValidationStateDictionary"/>.</param> public ValidationVisitorFork( ActionContext actionContext, IModelValidatorProvider validatorProvider, ValidatorCache validatorCache, IModelMetadataProvider metadataProvider, ValidationStateDictionary validationState) { if (actionContext == null) { throw new ArgumentNullException(nameof(actionContext)); } if (validatorProvider == null) { throw new ArgumentNullException(nameof(validatorProvider)); } if (validatorCache == null) { throw new ArgumentNullException(nameof(validatorCache)); } Context = actionContext; ValidatorProvider = validatorProvider; Cache = validatorCache; MetadataProvider = metadataProvider; ValidationState = validationState; ModelState = actionContext.ModelState; CurrentPath = new ValidationStack(); }
public void GetValidators_DoesNotCacheValidatorsWithIsReusableFalse() { // Arrange var cache = new ValidatorCache(); var metadata = new TestModelMetadataProvider().GetMetadataForProperty(typeof(TypeWithProperty), "Property1"); var validatorProvider = new ProviderWithNonReusableValidators(); // Act - 1 var validators1 = cache.GetValidators(metadata, validatorProvider); // Assert - 1 var validator1 = Assert.IsType <DataAnnotationsModelValidator>(validators1[0]); var validator2 = Assert.IsType <DataAnnotationsModelValidator>(validators1[1]); Assert.Contains(validator1.Attribute, metadata.ValidatorMetadata); // Copied by provider Assert.Contains(validator2.Attribute, metadata.ValidatorMetadata); // Copied by provider // Act - 2 var validators2 = cache.GetValidators(metadata, validatorProvider); // Assert - 2 Assert.NotSame(validators1, validators2); var requiredValidator = Assert.Single(validators2.Where(v => (v as DataAnnotationsModelValidator).Attribute is RequiredAttribute)); Assert.Contains(requiredValidator, validators1); // cached var stringLengthValidator = Assert.Single(validators2.Where(v => (v as DataAnnotationsModelValidator).Attribute is StringLengthAttribute)); Assert.DoesNotContain(stringLengthValidator, validators1); // not cached }
/// <summary> /// Creates a new <see cref="ValidationVisitor"/>. /// </summary> /// <param name="actionContext">The <see cref="ActionContext"/> associated with the current request.</param> /// <param name="validatorProvider">The <see cref="IModelValidatorProvider"/>.</param> /// <param name="validatorCache">The <see cref="ValidatorCache"/> that provides a list of <see cref="IModelValidator"/>s.</param> /// <param name="metadataProvider">The provider used for reading metadata for the model type.</param> /// <param name="validationState">The <see cref="ValidationStateDictionary"/>.</param> public ValidationVisitor( ActionContext actionContext, IModelValidatorProvider validatorProvider, #pragma warning disable PUB0001 // Pubternal type in public API ValidatorCache validatorCache, #pragma warning restore PUB0001 IModelMetadataProvider metadataProvider, ValidationStateDictionary validationState) { if (actionContext == null) { throw new ArgumentNullException(nameof(actionContext)); } if (validatorProvider == null) { throw new ArgumentNullException(nameof(validatorProvider)); } if (validatorCache == null) { throw new ArgumentNullException(nameof(validatorCache)); } Context = actionContext; ValidatorProvider = validatorProvider; Cache = validatorCache; MetadataProvider = metadataProvider; ValidationState = validationState; ModelState = actionContext.ModelState; CurrentPath = new ValidationStack(); }
private async Task ExecValidators(object request) { var feature = HostContext.GetPlugin <ValidationFeature>(); if (feature != null) { var validator = ValidatorCache.GetValidator(req, request.GetType()); if (validator != null) { var ruleSet = (string)(req.GetItem(Keywords.InvokeVerb) ?? req.Verb); var validationContext = new ValidationContext(request, null, new MultiRuleSetValidatorSelector(ruleSet)) { Request = req }; ValidationResult result; if (!validator.HasAsyncValidators(validationContext)) { result = validator.Validate(validationContext); } else { result = await validator.ValidateAsync(validationContext); } if (!result.IsValid) { throw result.ToWebServiceException(request, feature); } } } }
/// <summary> /// Initializes a new instance of <see cref="FluentValidationObjectModelValidator" />. /// </summary> public FluentValidationObjectModelValidator(IModelMetadataProvider modelMetadataProvider, IList <IModelValidatorProvider> validatorProviders) { _modelMetadataProvider = modelMetadataProvider ?? throw new ArgumentNullException(nameof(modelMetadataProvider)); _validatorCache = new ValidatorCache(); _validatorProvider = new CompositeModelValidatorProvider(validatorProviders); }
/// <summary> /// Gets a <see cref="ValidationVisitor"/> that traverses the object model graph and performs validation. /// </summary> /// <param name="actionContext">The <see cref="ActionContext"/>.</param> /// <param name="validatorProvider">The <see cref="IModelValidatorProvider"/>.</param> /// <param name="validatorCache">The <see cref="ValidatorCache"/>.</param> /// <param name="metadataProvider">The <see cref="IModelMetadataProvider"/>.</param> /// <param name="validationState">The <see cref="ValidationStateDictionary"/>.</param> /// <returns>A <see cref="ValidationVisitor"/> which traverses the object model graph.</returns> public abstract ValidationVisitor GetValidationVisitor( ActionContext actionContext, IModelValidatorProvider validatorProvider, #pragma warning disable PUB0001 // Pubternal type in public API ValidatorCache validatorCache, #pragma warning restore PUB0001 IModelMetadataProvider metadataProvider, ValidationStateDictionary validationState);
public FixedValidationVisitor( ActionContext actionContext, IModelValidatorProvider validatorProvider, ValidatorCache validatorCache, IModelMetadataProvider metadataProvider, ValidationStateDictionary validationState) : base(actionContext, validatorProvider, validatorCache, metadataProvider, validationState) { }
public void Setup() { BaselineModelMetadataProvider = CreateModelMetadataProvider(addHasValidatorsProvider: false); ModelMetadataProvider = CreateModelMetadataProvider(addHasValidatorsProvider: true); BaselineModelMetadata = BaselineModelMetadataProvider.GetMetadataForType(Model.GetType()); ModelMetadata = ModelMetadataProvider.GetMetadataForType(Model.GetType()); ActionContext = GetActionContext(); ValidatorCache = new ValidatorCache(); }
public CustomValidationVisitor(ActionContext actionContext, IModelValidatorProvider validatorProvider, ValidatorCache validatorCache, IModelMetadataProvider metadataProvider, ValidationStateDictionary validationState, IValidatorFactory validatorFactory, CustomizeValidatorAttribute cutomizations) : base(actionContext, validatorProvider, validatorCache, metadataProvider, validationState) { _modelState = actionContext.ModelState; _validatorCache = validatorCache; _metadataProvider = metadataProvider; _validatorFactory = validatorFactory; _cutomizations = cutomizations; _actionContext = actionContext; _validatorProvider = validatorProvider; }
public FluentValidationObjectModelValidator( IModelMetadataProvider modelMetadataProvider, IList <IModelValidatorProvider> validatorProviders, bool runMvcValidation, bool implicitValidationEnabled) : base(modelMetadataProvider, validatorProviders) { _runMvcValidation = runMvcValidation; _implicitValidationEnabled = implicitValidationEnabled; _validatorCache = new ValidatorCache(); _fvProvider = validatorProviders.SingleOrDefault(x => x is FluentValidationModelValidatorProvider) as FluentValidationModelValidatorProvider; }
/// <summary> /// Initializes a new instance of <see cref="FluentValidationObjectModelValidator" />. /// </summary> public FluentValidationObjectModelValidator(IModelMetadataProvider modelMetadataProvider, IList <IModelValidatorProvider> validatorProviders, IValidatorFactory validatorFactory) { if (modelMetadataProvider == null) { throw new ArgumentNullException(nameof(modelMetadataProvider)); } _validatorFactory = validatorFactory; _modelMetadataProvider = modelMetadataProvider; _validatorCache = new ValidatorCache(); _validatorProvider = new CompositeModelValidatorProvider(validatorProviders); }
public ObjectModelValidator( IModelMetadataProvider modelMetadataProvider, IList <IModelValidatorProvider> validatorProviders) { if (validatorProviders == null) { throw new ArgumentNullException(nameof(validatorProviders)); } this.modelMetadataProvider = modelMetadataProvider ?? throw new ArgumentNullException(nameof(modelMetadataProvider)); this.validatorCache = new ValidatorCache(); this.validatorProvider = new CompositeModelValidatorProvider(validatorProviders); }
/// <summary> /// Gets a <see cref="ValidationVisitor"/> that traverses the object model graph and performs validation. /// </summary> /// <param name="actionContext">The <see cref="ActionContext"/>.</param> /// <param name="validatorProvider">The <see cref="IModelValidatorProvider"/>.</param> /// <param name="validatorCache">The <see cref="ValidatorCache"/>.</param> /// <param name="metadataProvider">The <see cref="IModelMetadataProvider"/>.</param> /// <param name="validationState">The <see cref="ValidationStateDictionary"/>.</param> /// <returns>A <see cref="ValidationVisitor"/> which traverses the object model graph.</returns> public ValidationVisitor GetValidationVisitor( ActionContext actionContext, IModelValidatorProvider validatorProvider, ValidatorCache validatorCache, IModelMetadataProvider metadataProvider, ValidationStateDictionary validationState) { return(new SignumValidationVisitor( actionContext, validatorProvider, validatorCache, metadataProvider, validationState)); }
public override ValidationVisitor GetValidationVisitor( ActionContext actionContext, IModelValidatorProvider validatorProvider, ValidatorCache validatorCache, IModelMetadataProvider metadataProvider, ValidationStateDictionary validationState) { var visitor = new ValidationVisitor( actionContext, validatorProvider, validatorCache, metadataProvider, validationState); visitor.MaxValidationDepth = _mvcOptions.MaxValidationDepth; return(visitor); }
public EnhancedObjectValidator( IModelMetadataProvider modelMetadataProvider, IList <IModelValidatorProvider> validatorProviders) { if (modelMetadataProvider == null) { throw new ArgumentNullException(nameof(modelMetadataProvider)); } if (validatorProviders == null) { throw new ArgumentNullException(nameof(validatorProviders)); } _modelMetadataProvider = modelMetadataProvider; _validatorCache = new ValidatorCache(); _validatorProvider = new CompositeModelValidatorProvider(validatorProviders); }
public override ValidationVisitor GetValidationVisitor( ActionContext actionContext, IModelValidatorProvider validatorProvider, ValidatorCache validatorCache, IModelMetadataProvider metadataProvider, ValidationStateDictionary validationState) { var visitor = new ValidationVisitor( actionContext, validatorProvider, validatorCache, metadataProvider, validationState); visitor.MaxValidationDepth = _mvcOptions.MaxValidationDepth; visitor.AllowShortCircuitingValidationWhenNoValidatorsArePresent = _mvcOptions.AllowShortCircuitingValidationWhenNoValidatorsArePresent; return(visitor); }
public FluentValidationObjectModelValidator( IModelMetadataProvider modelMetadataProvider, IList <IModelValidatorProvider> validatorProviders, bool runMvcValidation) { if (modelMetadataProvider == null) { throw new ArgumentNullException(nameof(modelMetadataProvider)); } if (validatorProviders == null) { throw new ArgumentNullException(nameof(validatorProviders)); } _modelMetadataProvider = modelMetadataProvider; _runMvcValidation = runMvcValidation; _validatorCache = new ValidatorCache(); _fvProvider = validatorProviders.SingleOrDefault(x => x is FluentValidationModelValidatorProvider) as FluentValidationModelValidatorProvider; _compositeProvider = new CompositeModelValidatorProvider(validatorProviders); //.Except(new IModelValidatorProvider[]{ _fvProvider }).ToList()); }
public override ValidationVisitor GetValidationVisitor( ActionContext actionContext, IModelValidatorProvider validatorProvider, ValidatorCache validatorCache, IModelMetadataProvider metadataProvider, ValidationStateDictionary?validationState) { var visitor = new ValidationVisitor( actionContext, validatorProvider, validatorCache, metadataProvider, validationState) { MaxValidationDepth = _mvcOptions.MaxValidationDepth, ValidateComplexTypesIfChildValidationFails = _mvcOptions.ValidateComplexTypesIfChildValidationFails, }; return(visitor); }
private TResponse ExecSync <TResponse>(object request) { if (HostContext.AppHost.GatewayRequestFilter != null) { HostContext.AppHost.GatewayRequestFilter(req, request); if (req.Response.IsClosed) { return(default(TResponse)); } } if (HostContext.HasPlugin <ValidationFeature>()) { var validator = ValidatorCache.GetValidator(req, request.GetType()); if (validator != null) { var ruleSet = (string)(req.GetItem(Keywords.InvokeVerb) ?? req.Verb); var result = validator.Validate(new ValidationContext( request, null, new MultiRuleSetValidatorSelector(ruleSet)) { Request = req }); if (!result.IsValid) { throw new ValidationException(result.Errors); } } } var response = HostContext.ServiceController.Execute(request, req); var responseTask = response as Task; if (responseTask != null) { response = responseTask.GetResult(); } return(ConvertToResponse <TResponse>(response)); }
public override ValidationVisitor GetValidationVisitor(ActionContext actionContext, IModelValidatorProvider validatorProvider, ValidatorCache validatorCache, IModelMetadataProvider metadataProvider, ValidationStateDictionary validationState) { // Setting as to whether we should run only FV or FV + the other validator providers var validatorProviderToUse = _runMvcValidation ? validatorProvider : _fvProvider; var visitor = new FluentValidationVisitor( actionContext, validatorProviderToUse, validatorCache, metadataProvider, validationState); return(visitor); }
/// <summary> /// Gets a <see cref="ValidationVisitor"/> that traverses the object model graph and performs validation. /// </summary> /// <param name="actionContext">The <see cref="ActionContext"/>.</param> /// <param name="validatorProvider">The <see cref="IModelValidatorProvider"/>.</param> /// <param name="validatorCache">The <see cref="ValidatorCache"/>.</param> /// <param name="metadataProvider">The <see cref="IModelMetadataProvider"/>.</param> /// <param name="validationState">The <see cref="ValidationStateDictionary"/>.</param> /// <returns>A <see cref="ValidationVisitor"/> which traverses the object model graph.</returns> public abstract ValidationVisitor GetValidationVisitor( ActionContext actionContext, IModelValidatorProvider validatorProvider, ValidatorCache validatorCache, IModelMetadataProvider metadataProvider, ValidationStateDictionary validationState);
public OverrideValidationVisitor(IEnumerable <ISkipValidation> skipValidations, ActionContext actionContext, IModelValidatorProvider validatorProvider, ValidatorCache validatorCache, IModelMetadataProvider metadataProvider, ValidationStateDictionary validationState) : base(actionContext, validatorProvider, validatorCache, metadataProvider, validationState) { SkipValidations = skipValidations; }
public override ValidationVisitor GetValidationVisitor(ActionContext actionContext, IModelValidatorProvider validatorProvider, ValidatorCache validatorCache, IModelMetadataProvider metadataProvider, ValidationStateDictionary validationState) { return(new CustomValidationVisitor( actionContext, validatorProvider, validatorCache, _customModelMetadataProvider, validationState)); }
public CustomValidationVisitor(ActionContext actionContext, IModelValidatorProvider validatorProvider, ValidatorCache validatorCache, ICustomModelMetadataProviderSingleton metadataProvider, ValidationStateDictionary validationState) : base(actionContext, validatorProvider, validatorCache, metadataProvider, validationState) { }
public FluentValidationVisitor(ActionContext actionContext, IModelValidatorProvider validatorProvider, ValidatorCache validatorCache, IModelMetadataProvider metadataProvider, ValidationStateDictionary validationState) : base(actionContext, validatorProvider, validatorCache, metadataProvider, validationState) { ValidateComplexTypesIfChildValidationFails = true; }
public DynamicFormsValidationVisitor(ActionContext actionContext, IModelValidatorProvider validatorProvider, ValidatorCache validatorCache, IDynamicFormsModelMetadataProviderSingleton metadataProvider, ValidationStateDictionary validationState) : base(actionContext, validatorProvider, validatorCache, metadataProvider, validationState) { }