/// <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)); }
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); }
/// <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); }
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"); }
/// <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) { if (string.IsNullOrEmpty(value)) { return true; } double number = 0d; if (double.TryParse(value, out number)) { return number >= this.MinValue && number <= this.MaxValue; } return false; }
/// <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(); }
/// <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()); }
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(); }
/// <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()); }
/// <summary> /// 验证属性的值是否通过 /// </summary> /// <param name="value">属性的值</param> /// <param name="validContext">验证上下文</param> /// <returns></returns> bool IValidRule.IsValid(object value, ValidContext validContext) { return base.IsValid(value); }
/// <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+$")); }
/// <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)); }
/// <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)); }
/// <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+$"); }
/// <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); }
/// <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); }
/// <summary> /// 验证属性的值是否通过 /// </summary> /// <param name="value">属性的值</param> /// <param name="validContext">验证上下文</param> /// <returns></returns> bool IValidRule.IsValid(object value, ValidContext validContext) { return(base.IsValid(value)); }