Пример #1
0
        /// <summary>
        /// 验证属性的值是否通过
        /// </summary>
        /// <param name="value">属性的值</param>
        /// <param name="validContext">验证上下文</param>
        /// <returns></returns>
        protected override bool IsValid(string value, ValidContext validContext)
        {
            if (base.IsValid(value) == true)
            {
                return true;
            }

            var pattern = @"^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$";
            return Regex.IsMatch(value, pattern);
        }
        /// <summary>
        /// 验证属性的值是否通过
        /// </summary>
        /// <param name="value">属性的值</param>
        /// <param name="validContext">验证上下文</param>
        /// <returns></returns>
        protected override bool IsValid(string value, ValidContext validContext)
        {
            if (base.IsValid(value) == true)
            {
                return(true);
            }

            var pattern = @"^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$";

            return(Regex.IsMatch(value, pattern));
        }
Пример #3
0
        public void Validator_ValidContext_SupportsCancellation()
        {
            // Arrange
            using var context = new ValidContext(_connectionString);

            // Act
            var validationTask = _defaultValidator.ValidateContextAsync(context, cancellationToken: new CancellationToken(true));

            // Assert
            validationTask.Status.Should().Be(TaskStatus.Canceled);
        }
Пример #4
0
        /// <summary>
        /// 验证属性的值是否通过
        /// </summary>
        /// <param name="value">属性的值</param>
        /// <param name="validContext">验证上下文</param>
        /// <returns></returns>
        protected override bool IsValid(string value, ValidContext validContext)
        {
            if (string.IsNullOrEmpty(value))
            {
                return(true);
            }

            if (double.TryParse(value, out double number))
            {
                return(number >= this.MinValue && number <= this.MaxValue);
            }
            return(false);
        }
Пример #5
0
        public async Task Validator_ValidContext_ReportsProgress()
        {
            // Arrange
            var progress = new AccumulatorProgress <Table>();

            using var context = new ValidContext(_connectionString);

            // Act
            await _defaultValidator.ValidateContextAsync(context, progress);

            // Assert
            progress.Items.Select(e => e.TableName).Should().BeEquivalentTo("tCustomers", "tOrders");
        }
Пример #6
0
        /// <summary>
        /// 验证属性的值是否通过
        /// </summary>
        /// <param name="value">属性的值</param>
        /// <param name="validContext">验证上下文</param>
        /// <returns></returns>
        protected override bool IsValid(string value, ValidContext validContext)
        {
            if (string.IsNullOrEmpty(value))
            {
                return true;
            }

            var values = value.Split('.');
            if (this.Max > 0 && values.Length > 0)
            {
                return values.Last().Length <= Max;
            }
            return true;
        }
Пример #7
0
        /// <summary>
        /// 验证属性的值是否通过
        /// </summary>
        /// <param name="value">属性的值</param>
        /// <param name="validContext">验证上下文</param>
        /// <returns></returns>
        protected override bool IsValid(string value, ValidContext validContext)
        {
            if (string.IsNullOrEmpty(value))
            {
                return true;
            }

            double number = 0d;
            if (double.TryParse(value, out number))
            {
                return number >= this.MinValue && number <= this.MaxValue;
            }
            return false;
        }
Пример #8
0
        /// <summary>
        /// 验证属性的值是否通过
        /// </summary>
        /// <param name="value">属性的值</param>
        /// <param name="validContext">验证上下文</param>
        /// <returns></returns>
        protected override bool IsValid(string value, ValidContext validContext)
        {
            if (string.IsNullOrEmpty(value))
            {
                return(true);
            }

            var values = value.Split('.');

            if (this.Max > 0 && values.Length > 0)
            {
                return(values.Last().Length <= Max);
            }
            return(true);
        }
        /// <summary>
        /// 验证属性的值是否通过
        /// </summary>
        /// <param name="value">属性的值</param>
        /// <param name="validContext">验证上下文</param>
        /// <returns></returns>
        protected override bool IsValid(string value, ValidContext validContext)
        {
            var targetProperty = validContext.Properties.FirstOrDefault(item => item.Name == this.propertyName);
            if (targetProperty == null)
            {
                return false;
            }

            var tagrgetValue = targetProperty.GetValue(validContext.Instance);
            if (tagrgetValue == null)
            {
                return false;
            }
            return value == tagrgetValue.ToString();
        }
Пример #10
0
        /// <summary>
        /// 验证属性的值是否通过
        /// </summary>
        /// <param name="value">属性的值</param>
        /// <param name="validContext">验证上下文</param>
        /// <returns></returns>
        protected override bool IsValid(string value, ValidContext validContext)
        {
            var targetProperty = validContext.Properties.FirstOrDefault(item => item.Name == this.propertyName);

            if (targetProperty == null)
            {
                return(false);
            }

            var tagrgetValue = targetProperty.GetValue(validContext.Instance);

            if (tagrgetValue == null)
            {
                return(false);
            }
            return(value == tagrgetValue.ToString());
        }
Пример #11
0
        public async Task Validator_ValidContext_ReturnNoErrors()
        {
            // Arrange
            using var context = new ValidContext(_connectionString);

            // Act
            var errors = await _defaultValidator.ValidateContextAsync(context);

            // Assert
            errors.Should().BeEmpty();
            // ReSharper disable AccessToDisposedClosure
            Func <Task> customersTask = async() => { await context.Customers.ToListAsync(); };
            Func <Task> ordersTask    = async() => { await context.Orders.ToListAsync(); };
            // ReSharper restore AccessToDisposedClosure
            await customersTask.Should().NotThrowAsync();

            await ordersTask.Should().NotThrowAsync();
        }
Пример #12
0
        /// <summary>
        /// 验证模型
        /// 包括Attribute规则和Fluent规则
        /// </summary>
        /// <typeparam name="T">模型类型</typeparam>
        /// <param name="model">模型实例</param>
        /// <returns></returns>
        public static ValidResult ValidFor <T>(T model)
        {
            if (model == null)
            {
                return(ValidResult.False("模型不能为null .."));
            }

            var context = new ValidContext(model, RuleProperty.GetGetProperties(typeof(T)));

            foreach (var property in context.Properties)
            {
                var failureRule = property.GetFailureRule(context);
                if (failureRule != null)
                {
                    var message = failureRule.FormatErrorMessage(null);
                    return(ValidResult.False(message, property.Info));
                }
            }
            return(ValidResult.True());
        }
Пример #13
0
 /// <summary>
 /// 验证属性的值是否通过
 /// </summary>
 /// <param name="value">属性的值</param>
 /// <param name="validContext">验证上下文</param>
 /// <returns></returns>
 bool IValidRule.IsValid(object value, ValidContext validContext)
 {
     return base.IsValid(value);
 }
Пример #14
0
 /// <summary>
 /// 验证属性的值是否通过
 /// </summary>
 /// <param name="value">属性的值</param>
 /// <param name="validContext">验证上下文</param>
 /// <returns></returns>
 protected override bool IsValid(string value, ValidContext validContext)
 {
     return(Regex.IsMatch(value, @"^\w+(\.\w*)*@\w+\.\w+$"));
 }
Пример #15
0
 /// <summary>
 /// 验证属性的值是否通过
 /// </summary>
 /// <param name="value">属性的值</param>
 /// <param name="validContext">验证上下文</param>
 /// <returns></returns>
 protected override bool IsValid(string value, ValidContext validContext)
 {
     return(!base.IsValid(value, validContext));
 }
Пример #16
0
 /// <summary>
 /// 验证属性的值是否通过
 /// </summary>
 /// <param name="value">属性的值</param>
 /// <param name="validContext">验证上下文</param>
 /// <returns></returns>
 protected override bool IsValid(string value, ValidContext validContext)
 {
     return(Regex.IsMatch(value, this.RegexPattern));
 }
Пример #17
0
 /// <summary>
 /// 验证属性的值是否通过
 /// </summary>
 /// <param name="value">属性的值</param>
 /// <param name="validContext">验证上下文</param>
 /// <returns></returns>
 protected override bool IsValid(string value, ValidContext validContext)
 {
     return Regex.IsMatch(value, @"^\w+(\.\w*)*@\w+\.\w+$");
 }
Пример #18
0
 /// <summary>
 /// 验证属性的值是否通过
 /// </summary>
 /// <param name="value">属性的值</param>
 /// <param name="validContext">验证上下文</param>
 /// <returns></returns>
 protected override bool IsValid(string value, ValidContext validContext)
 {
     return Regex.IsMatch(value, this.RegexPattern);
 }
Пример #19
0
 /// <summary>
 /// 验证属性的值是否通过
 /// </summary>
 /// <param name="value">属性的值</param>
 /// <param name="validContext">验证上下文</param>
 /// <returns></returns>
 protected override bool IsValid(string value, ValidContext validContext)
 {
     return !base.IsValid(value, validContext);
 }
Пример #20
0
 /// <summary>
 /// 验证属性的值是否通过
 /// </summary>
 /// <param name="value">属性的值</param>
 /// <param name="validContext">验证上下文</param>
 /// <returns></returns>
 bool IValidRule.IsValid(object value, ValidContext validContext)
 {
     return(base.IsValid(value));
 }