/// <summary> /// Pick out validation errors and turn these into a suitable exception structure /// </summary> /// <param name="actionContext">Action Context</param> public override void OnActionExecuting(HttpActionContext actionContext) { ModelStateDictionary modelState = actionContext.ModelState; if (modelState.IsValid) { // Only perform the FluentValidation if we've not already failed validation earlier on IDependencyScope scope = actionContext.Request.GetDependencyScope(); IFluentValidatorProvider mvp = scope.GetService(typeof(IFluentValidatorProvider)) as IFluentValidatorProvider; if (mvp != null) { ModelMetadataProvider metadataProvider = actionContext.GetMetadataProvider(); foreach (KeyValuePair <string, object> argument in actionContext.ActionArguments) { if (argument.Value != null && !argument.Value.GetType().IsSimpleType()) { ModelMetadata metadata = metadataProvider.GetMetadataForType( () => argument.Value, argument.Value.GetType() ); InternalValidationContext validationContext = new InternalValidationContext() { MetadataProvider = metadataProvider, ActionContext = actionContext, ModelState = actionContext.ModelState, Visited = new HashSet <object>(), KeyBuilders = new Stack <IKeyBuilder>(), RootPrefix = String.Empty, Provider = mvp, Scope = scope }; ValidateNodeAndChildren(metadata, validationContext, null); } } } } }
public void Setup() { _scope = new Mock <IDependencyScope>().Object; _mockFactory = new Mock <IScopedValidatorFactory>(MockBehavior.Strict); _sut = new FluentValidatorProvider(_mockFactory.Object); }