模型/数据验证(System.ComponentModel.DataAnnotations)笔记
Posted on 2020-09-16 20:25 闪电龟龟 阅读(877) 评论(0) 编辑 收藏 举报1.
、、
2.案例:(具体参照:https://www.jianshu.com/p/ca44d2ffa974)
Models:
using System.Collections.Generic; using System.ComponentModel.DataAnnotations; namespace WebApplication1.Models { public class UserModel { [Required(ErrorMessage = "{0} 必须填写")] // 必须 public string UserID { get; set; } /// <summary> /// 姓名 /// </summary> [MaxLength(10, ErrorMessage = "超出字符长度")] [MinLength(2, ErrorMessage = "最短字符长度为2")] public string UserName { get; set; } /// <summary> /// 年龄 /// </summary> [Required(ErrorMessage = "{0} 必须填写")] [Range(18, 100)] public int Age { get; set; } /// <summary> /// 性别:1表示男,2表示女 /// </summary> [RegularExpression(@"[1|2]+", ErrorMessage = "性别不正确")] // 正则规则 public int Sex { get; set; } } public class ValidResult { public List<ErrorMember> ErrorMembers { get; set; } public bool IsVaild { get; set; } } public class ErrorMember { public string ErrorMessage { get; set; } public string ErrorMemberName { get; set; } } }
逻辑层处理:
/// <summary> /// 逻辑处理 /// </summary> /// <param name="value"></param> /// <returns></returns> private static ValidResult IsValid(object value) { ValidResult result = new ValidResult(); try { var validationContext = new ValidationContext(value); var results = new List<ValidationResult>(); var isValid = Validator.TryValidateObject(value, validationContext, results, true); if (!isValid) { result.IsVaild = false; result.ErrorMembers = new List<ErrorMember>(); foreach (var item in results) { result.ErrorMembers.Add(new ErrorMember() { ErrorMessage = item.ErrorMessage, ErrorMemberName = item.MemberNames.FirstOrDefault() }); } } else { result.IsVaild = true; } } catch (Exception ex) { result.IsVaild = false; result.ErrorMembers = new List<ErrorMember>(); result.ErrorMembers.Add(new ErrorMember() { ErrorMessage = ex.Message, ErrorMemberName = "Internal error" }); } return result; }
验证失败处理(可以逻辑层验证封装成一个静态类):
#region 逻辑处理 UserModel person = new UserModel(); person.UserID = ""; person.UserName = "K"; person.Age = 100000; person.Sex = 3000; var result = IsValid(person); if (!result.IsVaild) { // 验证失败处理 foreach (ErrorMember errorMember in result.ErrorMembers) { Console.WriteLine(errorMember.ErrorMemberName + ":" + errorMember.ErrorMessage); } } #endregion
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现