.net Attribute效验的使用方法

本文介绍了一种在.NET项目中使用自定义Attribute来进行实体类属性验证的方法。通过配置web.config文件并结合自定义验证器,可以实现如非空、长度限制及电子邮件格式等常见验证功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

近来在做.net的项目,因为会用到实体类,就想在实体类上用Attribute信息来对实体类中的属性进行配制。因为在网上没能找到类似的包,就只能在五一的时候自己写了一个,以下是这个包的使用方法。

首先:需要在web.config中配制验证器。
xml 代码
 
  1. <configSections>  
  2.         <sectionGroup name="Validate">  
  3.             <section name="Validators" type="Validator.Configuration.ValidateConfigurationSection, Validator"/>  
  4.         </sectionGroup>  
  5.     </configSections>  
  6.     <Validate>  
  7.         <Validators>  
  8.       <Validator name="Email" validateType="match" validateInfo="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" message="{0} is\'t Email"/>  
  9.       <Validator name="NotNull" validateType="inner" validateInfo="NotNull" message="{0}不能为空!"/>  
  10.       <Validator name="Length" validateType="inner" validateInfo="Length" message="{0}字符串长度不能超过{1}!"/>  
  11.       <Validator name="Decimal" validateType="inner" validateInfo="Decimal" message="{0}必须大于{1},{0}必须小于{1}"/>  
  12.       <Validator name="TestClass" validateType="clazz" validateInfo="Validator.Test.TestObj, Validator" message="{0}class测试!"/>  
  13.         </Validators>  
  14.     </Validate>  


Validator 的Name为验证器的名称,这里要以attribute类中工ValidatorName相对应,validateType是一个枚举,他有代表着,验 证器的三个类型,inner是使用内置的验证器,match是正则表达式的验证器,clazz是实现iValidator的类做的验证器。后面validateInfo在种自的类型中有各自的意义,在inner时,他要以Name相同;在match时,他是一个正则表达式;在clazz时,他是一个类的AssemblyInfo信息,要显示的错误信息。

第二部,为每一个验证器写一个Attribut.
c# 代码
  1. public class NotNullValidateType : ValidateType
  2. {
  3. public NotNullValidateType(String sColName)
  4. {
  5. this.ColName = sColName;
  6. this.ValidatorName = "NotNull";
  7. }
  8. }
在这里我们必须继承ValidateType类,在这个类里我们实现了IValidateType的接口,我们必须为这个接口中的属性进行填值。
其中ValidatorName 是一个必输的,他就是在web.config 的配置的验证器名,ColName 是字段的名字,param 是要传入的参数。
c# 代码
  1. public interface IValidateType
  2. {
  3. string Param{get;set;}
  4. string ValidatorName{get;set;}
  5. string ColName{get;set;}
  6. }

第三部,验证器的编写

inner验证器是内置的验证器,所以我们不能添加他。

match验证器是正则表达式验证器,只要在配置中配制好就可以拥有这个功能。

clazz验证器是自定义类验证器,这个类配置到config中,且已经实现了IValidator.cs类。

c# 代码
  1. public class TestObj :ValidateType, IValidator
  2. {
  3. public TestObj()
  4. {
  5. this.ValidatorName = "TestClass";
  6. }
  7. public TestObj(String sColName)
  8. {
  9. this.ColName = sColName;
  10. this.ValidatorName = "TestClass";
  11. }
  12. #region IValidator 成员
  13. public bool validator(object value, ValidatorInfo vi, IValidateType vt)
  14. {
  15. //Console.Write("hello world gettype");
  16. return false;
  17. }
  18. #endregion
  19. }

最后, attribute的使用,
c# 代码
  1. public class UserObject
  2. {
  3. string _code;
  4. string _email;
  5. [ValidateType("NotNull")]
  6. [TestObj]
  7. [StringLengthValidateType(2)]
  8. public string Code
  9. {
  10. get { return _code; }
  11. set { _code = value; }
  12. }
  13. [EmailValidateType(null)]
  14. public string Email
  15. {
  16. get { return _email; }
  17. set { _email = value; }
  18. }
  19. decimal _age;
  20. [DecimalValidateType(0,50)]
  21. public decimal Age
  22. {
  23. get { return _age; }
  24. set { _age = value; }
  25. }
  26. }

以上就是attribut的使用方法,我们只要ValidateUtile.validate(uo)方法就可以对这个对象进行效验了。

最后, attribute的使用,
c# 代码
  1. public class UserObject
  2. {
  3. string _code;
  4. string _email;
  5. [ValidateType("NotNull")]
  6. [TestObj]
  7. [StringLengthValidateType(2)]
  8. public string Code
  9. {
  10. get { return _code; }
  11. set { _code = value; }
  12. }
  13. [EmailValidateType(null)]
  14. public string Email
  15. {
  16. get { return _email; }
  17. set { _email = value; }
  18. }
  19. decimal _age;
  20. [DecimalValidateType(0,50)]
  21. public decimal Age
  22. {
  23. get { return _age; }
  24. set { _age = value; }
  25. }
  26. }

以上就是attribut的使用方法,我们只要ValidateUtile.validate(uo)方法就可以对这个对象进行效验了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值