using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; namespace XdCxRhDW.Dto { /// /// int或枚举类型范围限制,默认不包含最小值,包含最大值 /// public class RangeIntAttribute : ValidationAttribute { /// /// /// public RangeIntAttribute() { } /// /// /// /// public RangeIntAttribute(int min) { this.Min = min; } /// /// /// /// /// public RangeIntAttribute(int min, int max) { this.Min = min; this.Max = max; } /// /// 最小值(为Null不会验证最小值) /// public int? Min { get; set; } /// /// 最大值(为Null不会验证最大值) /// public int? Max { get; set; } /// /// 是否包含最小值(默认不包含最小值) /// public bool IncludeMin { get; set; } = false; /// /// 是否包含最大值(默认包含最大值) /// public bool IncludeMax { get; set; } = true; /// /// Range验证 /// /// /// /// public override bool IsValid(object value) { if (value == null) return true; if (value.GetType() != typeof(int) && !value.GetType().IsEnum) { throw new Exception($"{nameof(RangeIntAttribute)}只能用于int或枚举类型!"); } var val = (int)value; if (Min == null && Max == null) return true; else if (Min != null && Max != null) { if (IncludeMin && IncludeMax) { ErrorMessage = "字段 {0} 范围" + $"[{Min},{Max}],当前值{val}"; return val >= Min && val <= Max; } else if (IncludeMin && !IncludeMax) { ErrorMessage = "字段 {0} 范围" + $"[{Min},{Max}),当前值{val}"; return val >= Min && val < Max; } else if (!IncludeMin && IncludeMax) { ErrorMessage = "字段 {0} 范围" + $"({Min},{Max}],当前值{val}"; return val > Min && val <= Max; } else { ErrorMessage = "字段 {0} 范围" + $"({Min},{Max}),当前值{val}"; return val > Min && val < Max; } } else if (Min != null && Max == null) { if (IncludeMin) { ErrorMessage = "字段 {0} 必须大于等于" + $"{Min},当前值{val}"; return val >= Min; } else { ErrorMessage = "字段 {0} 必须大于" + $"{Min},当前值{val}"; return val > Min; } } else//Min==null&&Max!=null { if (IncludeMax) { ErrorMessage = "字段 {0} 必须小于等于" + $"{Max},当前值{val}"; return val <= Max; } else { ErrorMessage = "字段 {0} 必须小于" + $"{Max},当前值{val}"; return val < Max; } } } } /// /// long类型范围限制,默认不包含最小值,包含最大值 /// public class RangeLongAttribute : ValidationAttribute { /// /// /// public RangeLongAttribute() { } /// /// /// /// public RangeLongAttribute(long min) { this.Min = min; } /// /// /// /// /// public RangeLongAttribute(long min, long max) { this.Min = min; this.Max = max; } /// /// 最小值(为Null不会验证最小值) /// public long? Min { get; set; } /// /// 最大值(为Null不会验证最大值) /// public long? Max { get; set; } /// /// 是否包含最小值(默认不包含最小值) /// public bool IncludeMin { get; set; } = false; /// /// 是否包含最大值(默认包含最大值) /// public bool IncludeMax { get; set; } = true; /// /// Range验证 /// /// /// /// public override bool IsValid(object value) { if (value == null) return true; if (value.GetType() != typeof(long) && !value.GetType().IsEnum) { throw new Exception($"{nameof(RangeLongAttribute)}只能用于long类型!"); } var val = (long)value; if (Min == null && Max == null) return true; else if (Min != null && Max != null) { if (IncludeMin && IncludeMax) { ErrorMessage = "字段 {0} 范围" + $"[{Min},{Max}],当前值{val}"; return val >= Min && val <= Max; } else if (IncludeMin && !IncludeMax) { ErrorMessage = "字段 {0} 范围" + $"[{Min},{Max}),当前值{val}"; return val >= Min && val < Max; } else if (!IncludeMin && IncludeMax) { ErrorMessage = "字段 {0} 范围" + $"({Min},{Max}],当前值{val}"; return val > Min && val <= Max; } else { ErrorMessage = "字段 {0} 范围" + $"({Min},{Max}),当前值{val}"; return val > Min && val < Max; } } else if (Min != null && Max == null) { if (IncludeMin) { ErrorMessage = "字段 {0} 必须大于等于" + $"{Min},当前值{val}"; return val >= Min; } else { ErrorMessage = "字段 {0} 必须大于" + $"{Min},当前值{val}"; return val > Min; } } else//Min==null&&Max!=null { if (IncludeMax) { ErrorMessage = "字段 {0} 必须小于等于" + $"{Max},当前值{val}"; return val <= Max; } else { ErrorMessage = "字段 {0} 必须小于" + $"{Max},当前值{val}"; return val < Max; } } } } /// /// double类型范围限制,默认不包含最小值,包含最大值 /// public class RangeDoubleAttribute : ValidationAttribute { /// /// /// public RangeDoubleAttribute() { } /// /// /// /// public RangeDoubleAttribute(double min) { this.Min = min; } /// /// /// /// /// public RangeDoubleAttribute(double min, double max) { this.Min = min; this.Max = max; } /// /// 最小值(为Null不会验证最小值) /// public double? Min { get; set; } /// /// 最大值(为Null不会验证最大值) /// public double? Max { get; set; } /// /// 是否包含最小值(默认不包含最小值) /// public bool IncludeMin { get; set; } = false; /// /// 是否包含最大值(默认包含最大值) /// public bool IncludeMax { get; set; } = true; /// /// Range验证 /// /// /// /// public override bool IsValid(object value) { if (value == null) return true; if (value.GetType() != typeof(double)) { throw new Exception($"{nameof(RangeDoubleAttribute)}只能用于double类型!"); } var val = (double)value; if (Min == null && Max == null) return true; else if (Min != null && Max != null) { if (IncludeMin && IncludeMax) { ErrorMessage = "字段 {0} 范围" + $"[{Min},{Max}],当前值{val}"; return val >= Min && val <= Max; } else if (IncludeMin && !IncludeMax) { ErrorMessage = "字段 {0} 范围" + $"[{Min},{Max}),当前值{val}"; return val >= Min && val < Max; } else if (!IncludeMin && IncludeMax) { ErrorMessage = "字段 {0} 范围" + $"({Min},{Max}],当前值{val}"; return val > Min && val <= Max; } else { ErrorMessage = "字段 {0} 范围" + $"({Min},{Max}),当前值{val}"; return val > Min && val < Max; } } else if (Min != null && Max == null) { if (IncludeMin) { ErrorMessage = "字段 {0} 必须大于等于" + $"{Min},当前值{val}"; return val >= Min; } else { ErrorMessage = "字段 {0} 必须大于" + $"{Min},当前值{val}"; return val > Min; } } else//Min==null&&Max!=null { if (IncludeMax) { ErrorMessage = "字段 {0} 必须小于等于" + $"{Max},当前值{val}"; return val <= Max; } else { ErrorMessage = "字段 {0} 必须小于" + $"{Max},当前值{val}"; return val < Max; } } } } }