日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于模型验证那点事儿

發(fā)布時間:2023/12/13 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于模型验证那点事儿 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

今天應笑笑老師之問,做了一個模型驗證的例子,發(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í)行結果

我們再添加一個,判斷是否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();

附上測試結果

特別注意一點,這個類的模型驗證是低于字段的模型驗證的,所以字段驗證不通過,這里是不觸發(fā)的,切記

轉載于:https://www.cnblogs.com/NCoreCoder/p/9869971.html

總結

以上是生活随笔為你收集整理的关于模型验证那点事儿的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。