注册表单如何展示模型返回的多条校验错误信息?
实现方案
第一步:调整响应模型
你注释的IEnumerable<string> Errors字段正是你需要的,直接启用即可,用来存储所有校验错误的集合,调整后的模型如下:
public class UserManagerResponse { public string AccessToken { get; set; } // 单条错误字段可保留做兼容,也可删除,后续统一用Errors返回多条错误 public string ErrorMessage { get; set; } public bool IsSuccess { get; set; } public IEnumerable<Claim> Claims { get; set; } // 启用错误列表字段 public IEnumerable<string> Errors { get; set; } public DateTime? ExpireDate { get; set; } }
第二步:修改注册校验逻辑
不要遇到第一个校验错误就直接返回,先初始化一个错误列表,依次执行所有校验规则,校验不通过就把对应错误提示加入列表,所有校验完成后再判断是否有错误,统一返回:
public async Task<UserManagerResponse> RegisterUserAsync(RegisterRequest model) { // 先初始化错误列表 var errors = new List<string>(); if (model == null) throw new NullReferenceException("注册请求模型为空"); // 校验密码一致性 if (model.Password != model.ConfirmPassword) { errors.Add("两次输入的密码不一致"); } // 校验密码长度 if (model.Password.Length < 5) { errors.Add("密码长度不能少于5位"); } // 后续可以继续添加其他校验规则,比如邮箱格式、用户名长度等,校验不通过就加入errors列表 // 示例: // if (!model.Email.Contains("@")) { errors.Add("邮箱格式不正确"); } // if (model.Username.Length <5) { errors.Add("用户名长度不能少于5位"); } // 所有校验完成后判断是否存在错误 if (errors.Any()) { return new UserManagerResponse { IsSuccess = false, Errors = errors // 如果要兼容旧的单条错误字段,可以把所有错误用换行拼接后赋值给ErrorMessage: // ErrorMessage = string.Join("\n", errors) }; } // 校验全部通过,执行后续注册业务逻辑 // ...你的其他注册代码... }
第三步:前端展示调整
前端拿到响应后,直接遍历Errors列表,把所有错误提示依次渲染即可实现同时展示全部校验失败的提示。
内容的提问来源于stack exchange,提问作者jacky
相关产品推荐
相关产品推荐

