protected virtual async Task AddMethodParameterValidationErrorsAsync(MethodInvocationValidationContext context) { for (var i = 0; i < context.Parameters.Length; i++) { await AddMethodParameterValidationErrorsAsync(context, context.Parameters[i], context.ParameterValues[i]); } }
protected virtual void ThrowValidationError(MethodInvocationValidationContext context) { throw new AbpValidationException( "Method arguments are not valid! See ValidationErrors for details.", context.Errors ); }
public void Validate(MethodInvocationValidationContext context) { var validationResult = new AbpValidationResult(); foreach (var parameterValue in context.ParameterValues) { var serviceType = typeof(IValidator <>).MakeGenericType(parameterValue.GetType()); var validator = _serviceProvider.GetService(serviceType) as IValidator; if (validator == null) { continue; } var result = validator.Validate(parameterValue); if (!result.IsValid) { validationResult.Errors.AddRange( result.Errors.Select( error => new ValidationResult(error.ErrorMessage) ) ); } } if (validationResult.Errors.Any()) { //TODO: How to localize messages? throw new AbpValidationException( "Method arguments are not valid! See ValidationErrors for details.", context.Errors ); } }
protected virtual bool IsValidationDisabled(MethodInvocationValidationContext context) { if (context.Method.IsDefined(typeof(EnableValidationAttribute), true)) { return(false); } if (ReflectionHelper.GetSingleAttributeOfMemberOrDeclaringTypeOrDefault <DisableValidationAttribute>(context.Method) != null) { return(true); } return(false); }
public virtual async Task ValidateAsync(MethodInvocationValidationContext context) { Check.NotNull(context, nameof(context)); if (context.Parameters.IsNullOrEmpty()) { return; } if (!context.Method.IsPublic) { return; } if (IsValidationDisabled(context)) { return; } if (context.Parameters.Length != context.ParameterValues.Length) { throw new Exception("Method parameter count does not match with argument count!"); } //todo: consider to remove this condition if (context.Errors.Any() && HasSingleNullArgument(context)) { ThrowValidationError(context); } await AddMethodParameterValidationErrorsAsync(context); if (context.Errors.Any()) { ThrowValidationError(context); } }
protected virtual bool HasSingleNullArgument(MethodInvocationValidationContext context) { return(context.Parameters.Length == 1 && context.ParameterValues[0] == null); }