P28 输入验证:自定义Attribute
对类级别的属性进行验证,也可以针对属性。。这里博主要做的是争对类级别的
先在根目录建个文件夹叫做ValidationAttributes
这次来个不合理的需求,让EmployeeNo不能等于FirstName
新建类:EmployeeNoMustDifferentFromFirstNameAttribute.cs
收下是需要继承 ValidationAttribute然后需要重写一个方法。
重写IsValid方法。带参数ValidationContext参数的这个方法。
参数Object value就是我们要验证的对象。
value强转成dto对象
或者也可以这么写。validationContext.ObjectInstance总会得到这个类的对象。
如果用value的话,如果我作用与property属性这个级别的话,我就返回属性的值 ,作用于类的话,value就返回这个对象的值,所以value是可变化的,validationContext是不变的
用于class级别
运行程序测试
为什么没有返回我们想要的错误呢,因为employeeNo有一个属性级别的错误。
要求长度最低为10
都改成10位的
FirstName和LastName是通过接口验证的,
EmployeeAddDto是我们使用的自定义Attribute进行验证的
接口和Attribute他俩实现的效果基本是一样的。但是为什么要使用CustomAttribute呢?因为自定义的Attribute既可以作用于类级别,也可以作用于Property属性级别。
如果属性级别的验证出现错误的话,那么这个类级别,无论是自定义的属性还是实现的validate接口,都不会被执行了。所以自定义的属性,在某些方面还是强于接口的方式的