Пример #1
0
 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]);
     }
 }
Пример #2
0
 protected virtual void ThrowValidationError(MethodInvocationValidationContext context)
 {
     throw new AbpValidationException(
               "Method arguments are not valid! See ValidationErrors for details.",
               context.Errors
               );
 }
Пример #3
0
        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
                          );
            }
        }
Пример #4
0
    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);
    }
Пример #5
0
    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);
        }
    }
Пример #6
0
 protected virtual bool HasSingleNullArgument(MethodInvocationValidationContext context)
 {
     return(context.Parameters.Length == 1 && context.ParameterValues[0] == null);
 }