C# 参数校验类库 学习笔记-目录
C#开发中用于参数校验的常用的类库有两种,DataAnnotations和fluentvalidation
1、DataAnnotations:
① 类库:System.ComponentModel.Annotations
② 原生的组件上就提供了丰富的参数校验规则, 也支持自定义规则.
- Required 必填, 示例:[Required(ErrorMessage = "ID是必填项")] 需要注意除了string类型的其他的值类型由于会赋予默认值, 所以加这个属性的时候值类型字段需要设置为可为空 例如 int? Id {get;set;}
- DisplayName:显示名
- Range 范围校验, 示例 [Range(1,99999999,ErrorMessage ="请输入正确的页码")]
- Compare 比较 与指定的字段值进行比较 [Compare("MyOtherProperty")]两个属性必须相同值,比如我们要求用户重复输入两次邮件地址时有用
- CreditCard 信用卡号
- EmailAddress 是否为邮件
- EnumDataType 校验枚举类型 示例: [EnumDataType(typeof(EnumModels.ResponseHttpCode),ErrorMessage = "未知的类型")]
- MaxLength 最大长度, 示例: [MaxLength(50,ErrorMessage = "昵称不能超过50个字")]
- MinLength 最小长度 , 示例: [MinLength(2,ErrorMessage = "昵称不能少于2个字")]
- StringLength 字符串长度不能超过给定的最大长度,也可以指定最小长度. 示例: [StringLength(50, ErrorMessage = "昵称只能介于2-50个字", MinimumLength = 2)]
- Url url格式, 示例: [Url(ErrorMessage = "链接格式错误")]
- RegularExpression 正则表达式 示例: [RegularExpression(@"^[1]{1}[3,4,5,6,7,8,9]{1}\d{9}$", ErrorMessage = "手机号码格式错误")]
- Bind:绑定:列出将参数绑定到表单时包含和不包含的参数。
- ScaffoIdColumn:隐藏的字符
- DataType:在前端显示的文本框类型
- Remote:服务端验证
- [Editable(false)]:放在主键上显示不可修改
原文见:https://www.bbsmax.com/A/KE5Q82bMJL/
③ Validatetion帮助类-ValidatetionHelper
/**
*┌──────────────────────────────────────────────────────────────┐
*│ 描 述:类成员的校验的工具类-System.ComponentModel.DataAnnotations
*│ 作 者:执笔小白整理-取自:https://www.cnblogs.com/code1992/p/12091910.html
*│ 版 本:1.0
*│ 创建时间:2022-07-08 23:59:52
*└──────────────────────────────────────────────────────────────┘
*┌──────────────────────────────────────────────────────────────┐
*│ 命名空间: ZhibiXiaobai.Model
*│ 类 名:ValidatetionHelper
*└──────────────────────────────────────────────────────────────┘
*/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace ZhibiXiaobai.Model
{
/// <summary>
/// 类成员的校验帮助类
/// 使用System.ComponentModel.DataAnnotations验证字段数据正确性
/// </summary>
public class ValidatetionHelper
{
/// <summary>
/// 校验类成员的值是否符合规定
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static ValidResult IsValid(object value)
{
ValidResult result = new ValidResult();
try
{
ValidationContext validationContext = new ValidationContext(value, null, null);
List<ValidationResult> results = new List<ValidationResult>();
bool isValid = Validator.TryValidateObject(value, validationContext, results, true);
if (!isValid)
{
result.IsVaild = false;
result.ErrorMembers = new List<ValidatetionErrorInfo>();
foreach (ValidationResult item in results)
{
string ErrorElement_Name = item.MemberNames.FirstOrDefault(); // 可为空
result.ErrorMembers.Add(new ValidatetionErrorInfo()
{
ErrorElement_Name = String.IsNullOrEmpty(ErrorElement_Name) ? "未知元素" : ErrorElement_Name,
ErrorMessage = String.IsNullOrEmpty(item.ErrorMessage) ? "未知错误" : item.ErrorMessage
});
}
}
else
{
result.IsVaild = true;
}
}
catch (Exception ex)
{
result.IsVaild = false;
result.ErrorMembers = new List<ValidatetionErrorInfo>();
result.ErrorMembers.Add(new ValidatetionErrorInfo()
{
ErrorMessage = ex.Message,
ErrorElement_Name = "内部类成员校验错误,代码:ValidatetionHelper-Error"
});
}
return result;
}
/// <summary>
/// 调用示例
/// </summary>
private void Test()
{
ValidatetionHelperTest person = new ValidatetionHelperTest();
person.Name = "";
person.Email = "121 212 K";
person.Phone = "2345";
person.Salary = 3000;
var result = ValidatetionHelper.IsValid(person);
if (!result.IsVaild)
{
foreach (ValidatetionErrorInfo errorMember in result.ErrorMembers)
{
Console.WriteLine(errorMember.ErrorElement_Name + ":" + errorMember.ErrorMessage);
}
}
Console.Read();
}
}
/// <summary>
/// 校验结果
/// </summary>
public class ValidResult
{
/// <summary>
/// 报错的类成员
/// </summary>
public List<ValidatetionErrorInfo> ErrorMembers { get; set; } = new List<ValidatetionErrorInfo>();
/// <summary>
/// 类中的成员是否全部校验通过
/// </summary>
public bool IsVaild { get; set; } = false;
}
/// <summary>
/// 类成员的报错信息类
/// </summary>
public class ValidatetionErrorInfo
{
/// <summary>
/// 报错成员的名称
/// </summary>
public string ErrorElement_Name { get; set; } = String.Empty;
/// <summary>
/// 对应的报错信息
/// </summary>
public string ErrorMessage { get; set; } = String.Empty;
}
/// <summary>
/// 测试的实体
/// </summary>
internal class ValidatetionHelperTest
{
[Required(ErrorMessage = "{0} 必须填写")]
[DisplayName("姓名")]
public string Name { get; set; }
[Required(ErrorMessage = "{0} 必须填写")]
[RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}", ErrorMessage = "邮件格式不正确")]
public string Email { get; set; }
[Required(ErrorMessage = "{0} 必须填写")]
[Range(1, 100, ErrorMessage = "超出范围")]
public int Age { get; set; }
[Required(ErrorMessage = "{0} 必须填写")]
[StringLength(11, MinimumLength = 11, ErrorMessage = "{0}输入长度不正确")]
public string Phone { get; set; }
[Required(ErrorMessage = "{0} 必须填写")]
[Range(typeof(decimal), "1000.00", "2000.99")]
public decimal Salary { get; set; }
}
}
2、fluentvalidation:
见:https://www.cnblogs.com/kelelipeng/p/14261760.html
补充-常用正则表达式
见:https://blog.csdn.net/ZYC88888/article/details/98479629
本文来自博客园,作者:꧁执笔小白꧂,转载请注明原文链接:https://www.cnblogs.com/qq2806933146xiaobai/articles/16444417.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下