ASP.Net Web API如何让标注MinLength属性的请求字段支持空字符串输入
内置的[MinLength]特性默认会将空字符串判定为不符合最小长度要求,没有内置的开关可以豁免空字符串的校验,不需要完全移除[MinLength]特性自行实现全量校验,有两种更简便的实现方式:
方案1:使用[RegularExpression]正则校验特性直接覆盖规则
单字段临时使用时,你可以直接替换掉[MinLength(9)],用正则同时支持空字符串和9-18位长度的校验,写法如下:
[RegularExpression(@"^$|^.{9,18}$", ErrorMessage = "字段长度需为9-18位,或留空")] [MaxLength(18)] public string Id { get; set; }
这种方式不需要额外编写自定义类,适配快。
方案2:自定义继承自MinLengthAttribute的校验特性
如果你有多个字段都需要类似「空字符串豁免最小长度校验」的规则,可以自定义一个可复用的特性,代码实现如下:
public class MinLengthAllowEmptyAttribute : MinLengthAttribute { public MinLengthAllowEmptyAttribute(int length) : base(length) { } public override bool IsValid(object value) { // 空字符串直接跳过最小长度校验 if (value is string input && input == string.Empty) { return true; } // 非空值走原生MinLength校验逻辑 return base.IsValid(value); } }
之后替换原有字段的[MinLength]特性即可:
[MinLengthAllowEmpty(9)] [MaxLength(18)] public string Id { get; set; }
内容的提问来源于stack exchange,提问作者Sperick
相关产品推荐
相关产品推荐

