예제 #1
0
        public void Validate(T model, IValidationContext context)
        {
            if (IsNullable)
            {
                if (model == null)
                {
                    if (Presence == Presence.Required)
                    {
                        context.AddError(RequiredErrorId, true);
                    }

                    return;
                }

                if (Presence == Presence.Forbidden)
                {
                    context.AddError(ForbiddenErrorId, true);

                    return;
                }
            }

            for (var i = 0; i < CommandScopes.Count; ++i)
            {
                CommandScopes[i].Validate(model, context);

                if (context.ShouldFallBack)
                {
                    return;
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Проверяет длину строки, либо массива, указанного в параметре <paramref name="value"/>
        /// сравнивая её с минимальной длиной, указанной в свойстве <see cref="Length"/>.
        /// </summary>
        /// 
        /// <remarks>
        /// Если длина объекта миньше, чем указанное число, то в валидационный
        /// контекст добавляется сообщение об ошибке, указанное в свойстве <see cref="Message"/>.
        /// 
        /// Если значение проверяемого объекта равно <c>null</c>, то валидация всегда 
        /// проходит успешно. Используйте <see cref="RequiredValidator"/>,
        /// если хотите проверить, имеет ли объект значение.
        /// 
        /// В качестве ключей для ошибок выступает пустая строка.
        /// </remarks>
        /// 
        /// <param name="value">Проверяемый объект.</param>
        /// <param name="context">Валидационный контекст.</param>
        /// 
        /// <exception cref="InvalidOperationException"><see cref="Length"/> имеет отрицательное значение.</exception>
        /// <exception cref="InvalidOperationException">
        ///   <paramref name="value"/> задан, но не является строкой или массивом.
        /// </exception>
        public void Validate(IValidationContext context, object value)
        {
            if (Length < 0)
            {
                throw new InvalidOperationException(
                    String.Format(Resources.Strings.LengthValidatorNegativeLength, GetType().Name, Length));
            }

            if (value == null) { return; }

            var str = value as string;
            var arr = value as Array;
            int num = str != null ? str.Length : arr != null ? arr.Length : -1;

            if (num == -1)
            {
                throw new InvalidOperationException(
                    String.Format(Resources.Strings.LengthValidatorInvalidObject, GetType().Name, value.GetType().Name));
            }

            if (num < Length)
            {
                context.AddError(String.Format(Message ?? Resources.Strings.MinLengthValidatorMessage, Length));
            }
        }
예제 #3
0
        /// <summary>
        /// Проверяет указанную в параметрах <paramref name="obj"/> строку
        /// или объект. Валидация завершается успешно, если значение объекта не равно <c>null</c>
        /// и не равно пустой строке (если объектом является строка и свойство <see cref="AllowEmptyStrings"/>
        /// имеет значение <c>false</c>).
        /// </summary>
        /// 
        /// <remarks>
        /// В качестве включей ошибок выступает пустая строка.
        /// </remarks>
        /// 
        /// <param name="obj">Проверяемый объект.</param>
        /// <param name="context">Валидационный контекст.</param>
        public void Validate(IValidationContext context, object obj)
        {
            var message = Message ?? Resources.Strings.PresenceValidatorMessage;

            if (obj == null)
            {
                context.AddError(message);
            }
            
            var str = obj as string;
            if (str != null)
            {
                if (!AllowEmptyStrings && str.Trim().Length == 0)
                {
                    context.AddError(message);
                }
            }
        }
예제 #4
0
        /// <summary>
        /// Проверяет заданный <paramref name="obj"/> на корректность,
        /// используя делегат, заданный в свойстве <see cref="Delegate"/>.
        /// </summary>
        /// 
        /// <remarks>
        /// Если валидация завершилась неудачей, то в валидационный
        /// контекст добавляется ошибка с сообщением, указанным в свойстве 
        /// <see cref="Message"/>.
        /// 
        /// В качестве ключей для ошибок выступает пустая строка.
        /// </remarks>
        /// 
        /// <param name="obj">Проверяемый объект.</param>
        /// <param name="context">Валидационный контекст.</param>
        /// <exception cref="InvalidOperationException">Свойство <see cref="Delegate"/> не задано.</exception>
        public void Validate(IValidationContext context, object obj)
        {
            if (Delegate == null)
            {
                throw new InvalidOperationException("Delegate can not be null");
            }

            if (!Delegate(obj))
            {
                context.AddError(Message);
            }
        }
예제 #5
0
        private void Validate(IEnumerable <Employee> employees, IValidationContext validationContext)
        {
            foreach (var e in employees)
            {
                var annualSalary = e.AnnualSalary;
                if (annualSalary < 0M)
                {
                    validationContext.AddError($"{nameof(annualSalary)} must not be a negative decimal, was: {annualSalary}");
                }
                if (!annualSalary.IsWholeNumber())
                {
                    validationContext.AddError($"{nameof(annualSalary)} must be a whole number, was: {annualSalary}");
                }

                if (String.IsNullOrWhiteSpace(e.FirstName))
                {
                    validationContext.AddError($"{nameof(e.FirstName)} must not be empty");
                }
                if (String.IsNullOrWhiteSpace(e.LastName))
                {
                    validationContext.AddError($"{nameof(e.LastName)} must not be empty");
                }

                if (e.PaymentStartDate == null)
                {
                    validationContext.AddError($"{nameof(e.PaymentStartDate)} payment period must be specified and use the following date range format: DD MM - DD MM");
                }

                if (e.SuperRate < 0M || e.SuperRate > 0.50M)
                {
                    validationContext.AddError($"{nameof(e.SuperRate)} must be between 0% and 50% inclusive");
                }
            }
        }
        /// <summary>
        /// Проверяет строковое представление указанного объекта на
        /// соответствие с указанным в свойстве <see cref="Pattern"/> 
        /// регулярным выражением, которое должно соответствовать всей строке.
        /// </summary>
        /// 
        /// <remarks>
        /// Если строковое представление удовлетворяет <c>String.IsNullOrEmpty</c>,
        /// то валидация всегда проходит успешно. Используйте <see cref="RequiredValidator"/>,
        /// если хотите проверить, имеет ли объект значение.
        /// 
        /// В качестве ключей для ошибок выступает пустая строка.</remarks>
        /// 
        /// <param name="obj">Проверяемый объект.</param>
        /// <param name="context">Валидационный контекст.</param>
        public void Validate(IValidationContext context, object obj)
        {
            var input = Convert.ToString(obj, CultureInfo.CurrentCulture);

            if (string.IsNullOrEmpty(input)) { return; }

            var match = Regex.Match(input, Pattern);

            if (!match.Success || match.Index != 0 || match.Length != input.Length)
            {
                context.AddError(String.Format(Message ?? Resources.Strings.RegularExpressionMessage, Pattern));
            }
        }
예제 #7
0
        public void Validate(IValidationContext validationContext)
        {
            for (int i = 0; i < Episodes.Count; i++)
            {
                var episode = Episodes[i];

                if (Episodes.FirstOrDefault(e => e.Title == episode.Title) != episode)
                {
                    validationContext.AddError(
                        $"[{i}].{nameof(episode.Title)}", "NonUniqueTitle",
                        $"Episode {episode.Number} has non unique Title field");
                }
            }
        }
예제 #8
0
        private void SaveEpisode(Episode episode)
        {
            int foundActorsCount = _dbContext.Actors
                                   .Select(a => a.Id)
                                   .Intersect(episode.ActorIds)
                                   .Count();

            if (foundActorsCount != episode.ActorIds.Length)
            {
                _validationContext.AddError(
                    nameof(episode.ActorIds), "HasUnknownActors",
                    $"Episode {episode.Number} has unknown actors");
            }

            _dbContext.Episodes.Add(episode);
        }
        private static void ValidateKeys(IValidationContext context, IEnumerable <string> keys, string component)
        {
            if (keys == null)
            {
                return;
            }

            foreach (var key in keys)
            {
                if (!KeyRegex.IsMatch(key))
                {
                    ValidationError error = new ValidationError(ErrorReason.Format, context.PathString,
                                                                string.Format(SRResource.Validation_ComponentsKeyMustMatchRegularExpr, key, component, KeyRegex.ToString()));
                    context.AddError(error);
                }
            }
        }
예제 #10
0
        /// <summary>
        /// Проверяет указанную в <paramref name="value"/> дату на корректность.
        /// </summary>
        /// 
        /// <param name="value">Проверяемая дата</param>
        /// <param name="context">Валидационный контекст.</param>
        /// 
        /// <exception cref="InvalidOperationException">
        ///   Параметр <paramref name="value"/> задан, но не является экземпляром типа <see cref="DateTime"/>.
        /// </exception>
        public void Validate(IValidationContext context, object value)
        {
            if (value == null)
            {
                return;
            }

            if (!(value is DateTime))
            {
                throw new InvalidOperationException(
                    String.Format(Resources.Strings.SqlDateTimeValidatorInvalidObject, GetType(), value.GetType()));
            }

            var dateTime = (DateTime)value;

            var isValid = ((dateTime >= (DateTime)SqlDateTime.MinValue) && (dateTime <= (DateTime)SqlDateTime.MaxValue));
            if (!isValid)
            {
                context.AddError(Message ?? Resources.Strings.SqlDateTimeValidatorMessage);
            }
        }
 public void Validate(IValidationContext context)
 {
     context.AddError(KeyName, "asdsd");
 }
예제 #12
0
 public void Validate(IValidationContext context)
 {
     context.AddError(string.Empty, "Hello!");
 }
예제 #13
0
        /// <summary>
        /// Helper method to simplify validation rules
        /// </summary>
        public static void CreateError(this IValidationContext context, string ruleName, string message)
        {
            OpenApiValidatorError error = new OpenApiValidatorError(ruleName, context.PathString, message);

            context.AddError(error);
        }
 public void Validate(IValidationContext context)
 {
     context.AddError("asdasd", "Hello");
 }