using NCC.DataValidation; using NCC.Dependency; using NCC.Localization; using System.Linq; namespace System.ComponentModel.DataAnnotations { /// /// 数据类型验证特性 /// [SuppressSniffer] public class DataValidationAttribute : ValidationAttribute { /// /// 构造函数 /// /// 验证逻辑 /// public DataValidationAttribute(ValidationPattern validationPattern, params object[] validationTypes) { ValidationPattern = validationPattern; ValidationTypes = validationTypes; } /// /// 构造函数 /// /// public DataValidationAttribute(params object[] validationTypes) { ValidationPattern = ValidationPattern.AllOfThem; ValidationTypes = validationTypes; } /// /// 验证逻辑 /// /// /// /// protected override ValidationResult IsValid(object value, ValidationContext validationContext) { // 判断是否允许 空值 if (AllowNullValue && value == null) return ValidationResult.Success; // 是否忽略空字符串 if (AllowEmptyStrings && value is string && value.Equals(string.Empty)) return ValidationResult.Success; // 执行值验证 var dataValidationResult = value.TryValidate(ValidationPattern, ValidationTypes); dataValidationResult.MemberOrValue = validationContext.MemberName; // 验证失败 if (!dataValidationResult.IsValid) { var resultMessage = dataValidationResult.ValidationResults.FirstOrDefault().ErrorMessage; // 进行多语言处理 var errorMessage = !string.IsNullOrWhiteSpace(ErrorMessage) ? ErrorMessage : resultMessage; return new ValidationResult(string.Format(L.Text == null ? errorMessage : L.Text[errorMessage], validationContext.MemberName)); } // 验证成功 return ValidationResult.Success; } /// /// 验证类型 /// public object[] ValidationTypes { get; set; } /// /// 验证逻辑 /// public ValidationPattern ValidationPattern { get; set; } /// ///是否允许空字符串 /// public bool AllowEmptyStrings { get; set; } = false; /// /// 允许空值,有值才验证,默认 false /// public bool AllowNullValue { get; set; } = false; } }