关于模型验证那点事儿
生活随笔
收集整理的這篇文章主要介紹了
关于模型验证那点事儿
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
今天應(yīng)笑笑老師之問,做了一個模型驗證的例子,發(fā)現(xiàn)之前對這個東西的理解太片面,重新整理了一下思路
字段驗證優(yōu)先級高于類驗證
什么是類驗證呢?就是兩個字段組合的驗證,比如你Admin不允許修改密碼,你修改密碼的Model在后端判斷字段是不是Admin,并且密碼的md5是不是特定的,我只是舉例子啊,這樣的驗證,優(yōu)先級是低于字段的驗證的,字段驗證通過,才會觸發(fā)這個驗證
驗證的通用部分代碼抄襲自劉總
劉總博客園鏈接附上https://www.cnblogs.com/lwc1st/
public class ModelStateResult{public bool IsValid { get; }public List<ValidationResult> ValitionResultList { get; }public ModelStateResult(bool isValid, List<ValidationResult> valitionResultList){IsValid = isValid;ValitionResultList = valitionResultList;}}public static class ValitionExtension{public static ModelStateResult Valition<TEntity>(this TEntity entity) where TEntity:class,new(){var valitionResultList = new List<ValidationResult>();var context = new ValidationContext(entity, null, null);var isValidate = Validator.TryValidateObject(entity, context, valitionResultList, true);return new ModelStateResult(isValidate, valitionResultList);}}我們先寫一個實體對象的常規(guī)驗證
public class UserInfo{[Required]public string User { get; set; }[StringLength(32, MinimumLength = 10)]public string Password { get; set; }public string PhoneNumber { get; set; }}驗證部分代碼附上
UserInfo testEntity = new UserInfo(){User = null,Password = "123",PhoneNumber = "123456"};var testResult = testEntity.Valition();我們看看執(zhí)行結(jié)果
我們再添加一個,判斷是否Admin的驗證
public class UserInfoValidation{public static ValidationResult IsAdmin(object value, ValidationContext validationContext){if (value is UserInfo userInfo){if (userInfo.User.Equals("Admin")){var isValidate = userInfo.Password.Equals("12345678901");if (!isValidate){return new ValidationResult("User Is Admin, Password Check Error");}}}return ValidationResult.Success;}}在實體對象上打上CustomValidation特性,會提示是兩個參數(shù),第一個就是實現(xiàn)了自定義驗證的類的Type,第二個參數(shù)是方法名
完整的實體對象代碼為
[CustomValidation(typeof(UserInfoValidation), "IsAdmin")]public class UserInfo{[Required]public string User { get; set; }[StringLength(32, MinimumLength = 10)]public string Password { get; set; }public string PhoneNumber { get; set; }}再寫一個測試代碼
var entity = new UserInfo(){User = "Admin",Password = "1234567890",PhoneNumber = "18382986022"};var validateResult = entity.Valition();附上測試結(jié)果
特別注意一點,這個類的模型驗證是低于字段的模型驗證的,所以字段驗證不通過,這里是不觸發(fā)的,切記
轉(zhuǎn)載于:https://www.cnblogs.com/NCoreCoder/p/9869971.html
總結(jié)
以上是生活随笔為你收集整理的关于模型验证那点事儿的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 特斯拉经理披露真实的马斯克:别人跟他顶嘴
- 下一篇: Elemant-UI日期范围的表单验证