这次准备讲下LValidatableObject
再讲它之前要先讲一下原理性的内容
上一节我们这里并没有判断ModelState.IsValid
.net core 2.0的版本是这么写的
.net core 3.0没有写,dto发生了验证错误。422状态码以为错误信息都会返回给客户端,这是为什么呢?
这是因为我们的Controller使用了ApiController进行了注解。所以所说当model进行绑定的时候,model上的各个属性注解就会被检查,所以说当model验证有错误的时候。400状态码就会自动的被返回。与他一同返回的还有在body里这些错误的信息。
类级别的验证或者是多个属性之间的验证。
今天我们以Emoloyee这个类,已经加上一些属性的验证。
![](https://img2020.cnblogs.com/blog/87548/202003/87548-20200323203634319-878829815.png)
实现IValidatableObject接口,并且
今天我们以Emoloyee这个类,已经加上一些属性的验证。
![](https://img2020.cnblogs.com/blog/87548/202003/87548-20200323203634319-878829815.png)
实现IValidatableObject接口,并且
![](https://img2020.cnblogs.com/blog/87548/202003/87548-20200323203635083-344992289.png)
实现接口的方法
![](https://img2020.cnblogs.com/blog/87548/202003/87548-20200323203635584-1312294314.png)
这个接口就这一个方法。在里面就可以定义一些相对复杂的验证规则。
![](https://img2020.cnblogs.com/blog/87548/202003/87548-20200323203636017-1978914599.png)
如果姓和名相同的话,我们就返回错误信息 通过yield return一个ValidationResult里面是错误信息。
![](https://img2020.cnblogs.com/blog/87548/202003/87548-20200323203636468-613246227.png)
![](https://img2020.cnblogs.com/blog/87548/202003/87548-20200323203637003-1613400217.png)
然后要指定这个验证错误是争对哪个属性引起的。下面这样就是认为它是一个类级别的错误。
![](https://img2020.cnblogs.com/blog/87548/202003/87548-20200323203637542-1346427342.png)
参数是一个数组,也可以认为是 这两个属性的错误
![](https://img2020.cnblogs.com/blog/87548/202003/87548-20200323203638086-1397278254.png)
![](https://img2020.cnblogs.com/blog/87548/202003/87548-20200323203638695-1460043716.png)
故意把姓和名改成一样的测试
![](https://img2020.cnblogs.com/blog/87548/202003/87548-20200323203639205-259860891.png)
![](https://img2020.cnblogs.com/blog/87548/202003/87548-20200323203639705-611064386.png)
姓和名最大长度默认不能超过50。故意把长度写的很长。
![](https://img2020.cnblogs.com/blog/87548/202003/87548-20200323203640232-1056411474.png)
![](https://img2020.cnblogs.com/blog/87548/202003/87548-20200323203640795-307079619.png)
当dto类里面DataAnnoation里面有不合法的Validate里面的就不会返回了。