/// <inheritdoc />
        public async Task <ValidationFailures> GetValidationResultsAsync(object value, ApiOperationContext apiOperationContext)
        {
            var results = new ValidationFailures();

            PropertyInfo[] propertyInfos = null;

            foreach (var validationSource in this._validationSources)
            {
                if (validationSource is IAttributeValidationSource attributeValidationSource)
                {
                    if (propertyInfos == null)
                    {
                        propertyInfos = value.GetType().GetProperties();
                    }

                    foreach (var propertyInfo in propertyInfos)
                    {
                        await attributeValidationSource.AddAttributeValidationResultsAsync(propertyInfo, value, apiOperationContext, results);
                    }
                }

                if (validationSource is IClassValidationSource classValidationSource)
                {
                    await classValidationSource.AddClassValidationResultsAsync(value, apiOperationContext, results);
                }
            }

            return(results);
        }
        public Task AddAttributeValidationResultsAsync(PropertyInfo propertyInfo, object value, ApiOperationContext apiOperationContext, ValidationFailures results)
        {
            var validationContext = new ValidationContext(value, null, null);

            var validationAttributes = propertyInfo.GetAttributes <ValidationAttribute>(true);

            foreach (var validation in validationAttributes)
            {
                var result = validation.GetValidationResult(
                    propertyInfo.GetValue(value, null),
                    GetValidationContext(validationContext, propertyInfo));

                if (result != ValidationResult.Success)
                {
                    results.AddFailure(result);
                }
            }

            return(Task.CompletedTask);
        }
Beispiel #3
0
        public async Task AddAttributeValidationResultsAsync(PropertyInfo propertyInfo, object value, ApiOperationContext apiOperationContext, ValidationFailures results)
        {
            var attributes = propertyInfo.GetAttributes <BlueprintValidationAttribute>(true);

            foreach (var attribute in attributes)
            {
                var result = await attribute.GetValidationResultAsync(propertyInfo.GetValue(value, null), propertyInfo.Name, apiOperationContext);

                if (result != ValidationResult.Success)
                {
                    results.AddFailure(result);
                }
            }
        }
        public Task AddClassValidationResultsAsync(object value, ApiOperationContext apiOperationContext, ValidationFailures results)
        {
            var validationContext = new ValidationContext(value, null, null);

            if (value is IValidatableObject validatableObject)
            {
                var validationResults = validatableObject.Validate(validationContext);

                foreach (var validationResult in validationResults)
                {
                    results.AddFailure(validationResult);
                }
            }

            return(Task.CompletedTask);
        }