ASPNetCore3.1自定义验证特性&多个特性的组合
创始人
2024-09-20 08:00:49
0次

在ASP Net Core 3.1中,可以通过自定义验证特性来对请求的参数进行合法性校验。但是,有时候需要同时对多个参数进行验证,并要求这些验证条件之间都成立才能通过验证。

例如,需要验证一个注册用户提交的表单,要求其中的用户名不能重复,密码必须包含数字和字母,且长度不能小于8个字符。这时候就需要对这三个条件进行组合验证,即只有这三个条件全部成立时,才能通过验证。

以下是实现组合验证的示例代码:

public class CustomValidationAttribute : ValidationAttribute
{
    public string Username { get; set; }
    public bool IncludeDigit { get; set; }
    public bool IncludeLetter { get; set; }
    public int MinLength { get; set; }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        // 验证用户名是否重复,返回错误信息或空
        var dbContext = validationContext.GetService(typeof(AppDbContext)) as AppDbContext;
        if (dbContext.Users.Any(u => u.Username == Username))
        {
            return new ValidationResult($"{Username}已存在。");
        }

        // 验证密码是否包含数字和字母,长度是否>=MinLength
        var password = value?.ToString() ?? "";
        bool hasDigit = IncludeDigit ? password.Any(c => char.IsDigit(c)) : true;
        bool hasLetter = IncludeLetter ? password.Any(c => char.IsLetter(c)) : true;
        bool hasValidLength = password.Length >= MinLength;
        if (!hasDigit || !hasLetter || !hasValidLength)
        {
            return new ValidationResult($"密码不符合要求。");
        }

        // 验证通过
        return ValidationResult.Success;
    }
}

public class RegisterUserModel
{
    [CustomValidation(Username = "admin", IncludeDigit = true, IncludeLetter = true, MinLength = 8)]
    public string Password { get; set; }
}

在上面的代码中,我们定义

相关内容

热门资讯

记者揭秘!中至赣牌圈开挂功能神... 记者揭秘!中至赣牌圈开挂功能神器,中至赣牌圈确实真的有开挂神器1、下载好中至赣牌圈透视辅助下载之后点...
玩家必用!皮皮斗地主透视挂功能... 玩家必用!皮皮斗地主透视挂功能插件,皮皮斗地主一直真的有透视挂插件1、操作简单,无需皮皮斗地主手机版...
今日公布!海安麻将开挂功能ap... 今日公布!海安麻将开挂功能app,海安麻将原来真的有开挂app一、海安麻将游戏安装教程牌型概率发牌机...
盘点十款!莆仙吹牛开挂功能软件... 盘点十款!莆仙吹牛开挂功能软件,莆仙吹牛总是是有开挂软件莆仙吹牛能透视中分为三种模型:莆仙吹牛模拟器...
玩家攻略推荐!奈曼麻将透视功能... 玩家攻略推荐!奈曼麻将透视功能攻略,奈曼麻将确实存在有透视攻略1、金币登录送、破产送、升级送、活动送...
我来教教你!十三十三水辅助功能... 我来教教你!十三十三水辅助功能app,十三十三水竟然真的是有辅助app1、在十三十三水插件功能辅助器...
来一盘!小巷娱乐透视挂功能教程... 来一盘!小巷娱乐透视挂功能教程,小巷娱乐确实真的有透视挂教程1、玩家可以在小巷娱乐线上大神俱乐部对游...
新手必备!微乐捉老麻子透视挂功... 新手必备!微乐捉老麻子透视挂功能教程,微乐捉老麻子好像是真的有透视挂教程微乐捉老麻子透视方法中分为三...
发现一款!同城跑胡子合集透视挂... 发现一款!同城跑胡子合集透视挂功能教程,同城跑胡子合集切实是真的有透视挂教程1、下载好同城跑胡子合集...
玩家必备科普!名发导航透视功能... 玩家必备科普!名发导航透视功能方法,名发导航都是有透视方法1、完成名发导航有辅助插件,帮助玩家取得所...