關于模型驗證那點事兒

今天應笑笑老師之問,做了一個模型驗證的例子,發現之前對這個東西的理解太片面,重新整理了一下思路

字段驗證優先級高于類驗證

什么是類驗證呢?就是兩個字段組合的驗證,比如你Admin不允許修改密碼,你修改密碼的Model在后端判斷字段是不是Admin,并且密碼的md5是不是特定的,我只是舉例子啊,這樣的驗證,優先級是低于字段的驗證的,字段驗證通過,才會觸發這個驗證

驗證的通用部分代碼抄襲自劉總

劉總博客園鏈接附上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);}}

我們先寫一個實體對象的常規驗證

    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();

我們看看執行結果

我們再添加一個,判斷是否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特性,會提示是兩個參數,第一個就是實現了自定義驗證的類的Type,第二個參數是方法名

完整的實體對象代碼為

   [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();

附上測試結果

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

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/250373.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/250373.shtml
英文地址,請注明出處:http://en.pswp.cn/news/250373.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mongoose --- createUser

說明 源代碼記錄、遺忘回顧mongoDB默認不需要使用賬號密碼即可訪問數據庫.下面是給mongoDB添加超級管理員和普通用戶的方法 以系統管理員的方式運行powershell連接數據庫 mongo查看數據庫: show dbs切換到admin數據庫: use admin創建超級管理員賬戶: db.createUser({user: roo…

Win10安裝MySQL5.7.22 解壓縮版(手動配置)方法

1.下載地址&#xff1a;https://dev.mysql.com/downloads/mysql/5.7.html#downloads 直接點擊下載項 下載后&#xff1a; 2.可以把解壓的內容隨便放到一個目錄&#xff0c;我的是如下目錄&#xff08;放到C盤的話&#xff0c;可能在修改ini文件時涉及權限問題&#xff0c;之后我…

Elemant-UI日期范圍的表單驗證

Form 組件提供了表單驗證的功能&#xff0c;只需要通過 rules 屬性傳入約定的驗證規則&#xff0c;并將 Form-Item 的 prop 屬性設置為需校驗的字段名即可。但是官網的示例只有普通日期類型的驗證&#xff0c;沒有時間范圍的驗證。 一開始&#xff0c;我認為時間時間范圍的是一…

node --- [express項目] 開發環境下使用morgan控制臺輸出訪問信息

說明 源代碼記錄、遺忘回顧 process.env node中提供了一個process.env接口用于訪問計算機中的系統環境變量. 可以利用以上屬性來區分當前的環境是開發環境還是生產環境,代碼如下: if (process.env.NODE_ENV development) {console.log(當前環境是開發環境) } else {consol…

Dynamics CRM 訪問團隊的使用

訪問團隊和負責人團隊的區別是&#xff1a;負責人團隊可以擁有記錄&#xff0c;訪問團隊不能擁有記錄也不能加入解決方案中。 訪問團隊用法1&#xff1a;可以將不同組織的人員加入到訪問組實現數據的更新、刪除、共享 訪問團隊用法2&#xff1a;訪問團隊模板的使用 步驟一&…

業務邏輯

快捷支付接口規范 問題背景 持卡人身份驗證持卡人在發卡銀行提供的身份驗證服務器進行驗證&#xff0c;將結果告知商戶資金清算資金清算在身份驗證通過后進行即時清算&#xff0c;也可能是通過專用資金清算網絡進行傳統方法弊端 持卡人需要訪問很多網站才能完成一次完整支付 &a…

node --- [express] cookie/session 機制與 中間件的使用(路由守衛)

說明 源代碼記憶、遺忘回顧使用 cookie/session 機制,讓 客戶端/服務器 的訪問變得有狀態 cookie 與 session 由于 HTTP 協議的無狀態性,當一次連接斷開后. 服務器并不會記錄用戶是否登錄. 因此需要引入 cookie/session 機制 cookie cookie: 瀏覽器在電腦硬盤中開辟的一塊空…

kprobe原理解析

參考 http://www.cnblogs.com/honpey/p/4575928.html kprobe是linux內核的一個重要特性&#xff0c;是一個輕量級的內核調試工具&#xff0c;同時它又是其他一些更高級的內核調試工具&#xff08;比如perf和systemtap&#xff09;的“基礎設施”&#xff0c;4.0版本的內核中&a…

02 數據類型

轉載于:https://www.cnblogs.com/theoup/p/9875293.html

css --- [學習筆記]背景圖片小結 css三大特性

源代碼 參考 1. 行高(line-height) 目標 理解 - 能說出行高和高度三種關系 - 能簡單理解為什么行高等于單行文字會垂直居應用 使用行高實現單行文字垂直居中能會測量行高 2. CSS 背景(background) 目標 理解 - 背景的作用css 背景圖片和插入圖片的區別 應用 通過 css 背景…

(數據科學學習手札30)樸素貝葉斯分類器的原理詳解Python與R實現

一、簡介 要介紹樸素貝葉斯&#xff08;naive bayes&#xff09;分類器&#xff0c;就不得不先介紹貝葉斯決策論的相關理論&#xff1a; 貝葉斯決策論&#xff08;bayesian decision theory&#xff09;是概率框架下實施決策的基本方法。對分類任務來說&#xff0c;在所有相關概…

【技術累積】【點】【java】【29】MapUtils

內容 是Apache組織下的commons-collections包中的工具類<dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId><version>3.2.1</version></dependency> Map操作相關的&#xff0c…

css --- [讀書筆記] 盒模型(邊框、內外邊距)

說明 源代碼學習 盒子模型(css重點) css學習三大重點: css盒子模型、 浮動、 定位 目標: 能說出盒子模型由哪四部分組成: 內容、邊框、內外邊距能說出內邊距的作用,設置不同數值分別代表的意思: 控制內部塊級元素和寬框的距離能說出塊級盒子居中對齊需要的2個條件能說出外邊…

Java 泛型,你了解類型擦除嗎?

泛型&#xff0c;一個孤獨的守門者。大家可能會有疑問&#xff0c;我為什么叫做泛型是一個守門者。這其實是我個人的看法而已&#xff0c;我的意思是說泛型沒有其看起來那么深不可測&#xff0c;它并不神秘與神奇。泛型是 Java 中一個很小巧的概念&#xff0c;但同時也是一個很…

css --- [讀書筆記] 浮動(float) 與 清除浮動

說明 源代碼學習 1. 浮動 1.1 CSS布局的三種機制 網頁布局的核心 — 利用 CSS 來擺放盒子 CSS提供了3種機制來設置盒子的擺放位置: 標準流、浮動和定位. 標準流: 塊級元素(div、hr、p、h1~h6、ul、ol、dl、form、table)會獨占一行,從上向下順序排列行內元素(span、a、i、em)…

Shiro身份認證---轉

目錄1.Shro的概念2.Shiro的簡單身份認證實現3.Shiro與spring對身份認證的實現前言&#xff1a; Shiro 可以非常容易的開發出足夠好的應用&#xff0c;其不僅可以用在 JavaSE 環境&#xff0c;也可以用在 JavaEE 環境。Shiro 可以幫助我們完成&#xff1a;認證、授權、加密、會話…

模板 Trie樹

模板 Trie樹 code&#xff1a; #include <iostream> #include <cstdio>using namespace std;const int wx20017;inline int read(){int sum0,f1; char chgetchar();while(ch<0||ch>9){if(ch-)f-1; chgetchar();}while(ch>0&&ch<9){sum(sum<…

css --- [練手小項目]樣式小結(字體、顏色的語義 清除浮動的使用)

說明 源代碼 1.1 CSS屬性書寫順序(重點) 建議遵循以下順序: 1.布局定位屬性: display / position / float / clear / visibility / overflow (建議display第一個寫, 畢竟關系到模式) 2.自身屬性: width / height / margin / padding / border / background 3.文本屬性: co…

《Hive編程指南》14.3 投影變換的實踐出錯原因分析

自己在學習14.3節投影變換執行SQL語句hive (default)> SELECT TRANSFORM(col1, col2) USING /bin/cut -f1 AS newA, newB FROM a;時出現了這個錯誤 Ended Job job_local1231989520_0004 with errors Error during job, obtaining debugging information... FAILED: Executi…

鏈式前向星(轉)

轉自大佬博客https://blog.csdn.net/ACdreamers/article/details/16902023 我們首先來看一下什么是前向星. 前向星是一種特殊的邊集數組,我們把邊集數組中的每一條邊按照起點從小到大排序,如果起點相同就按照終點從小到大排序, 并記錄下以某個點為起點的所有邊在數組中的起始位…