//1. [Required] //2. Other attributes //3. IValidatableObject Implementation public IEnumerable <ValidationResult> Validate(object o) { var attributeValidationContext = new System.ComponentModel.DataAnnotations.ValidationContext(o, _serviceProvider, new Dictionary <object, object>()); var validationResults = new List <ValidationResult>(); var isValid = Validator.TryValidateObject( attributeValidationContext.ObjectInstance, attributeValidationContext, validationResults, validateAllProperties: true); // if true [Required] + Other attributes var attributeValidationResults = validationResults.Where(r => r != ValidationResult.Success); var fluentValidationContext = new FluentValidation.ValidationContext <object>(o); var fluentValidationFailures = _validators .Select(v => v.Validate(fluentValidationContext)) .SelectMany(result => result.Errors) .Where(f => f != null) .ToList(); var fluentValidationResults = fluentValidationFailures.Select(f => new ValidationResult(f.ErrorMessage, new string[] { f.PropertyName })); return(attributeValidationResults.Concat(fluentValidationResults)); }
public Task <TResponse> Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate <TResponse> next) { var context = new FluentValidation.ValidationContext <TRequest>(request); var failures = _validators .Select(v => v.Validate(context)) .SelectMany(result => result.Errors) .Where(f => f != null) .ToList(); if (failures.Count != 0) { throw new ValidationException(failures); } return(next()); }
public async Task <TResponse> Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate <TResponse> next) { if (_validators.Any()) { var context = new FluentValidation.ValidationContext <TRequest>(request); var validationResults = await Task.WhenAll(_validators.Select(v => v.ValidateAsync(context, cancellationToken))); var failures = validationResults.SelectMany(r => r.Errors).Where(f => f != null).ToList(); if (failures.Count != 0) { throw new Exceptions.ValidationException(failures); } } return(await next()); }
public async Task <TResponse> Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate <TResponse> next) { // if you have validation setup for the request if (_validators.Any()) { // create new validation context for the request var context = new FluentValidation.ValidationContext <TRequest>(request); // validate for each task and return validationResult if all of them have commpleted var validationResults = await Task.WhenAll(_validators.Select(v => v.ValidateAsync(context, cancellationToken))); //get failures from ValidationResult var failures = validationResults.SelectMany(r => r.Errors).Where(f => f != null).ToList(); // if failures if (failures.Count != 0) { throw new Exceptions.ValidationException(failures); } } // return next the handle if you dont have a validation setup return(await next()); }