如何對用戶輸入的數據進行驗證

来源:https://www.cnblogs.com/zhuanghamiao/archive/2022/03/25/Data_Validate.html
-Advertisement-
Play Games

為了保證用戶輸入系統的數據是有效的,同時也是為了避免程式出現不可預期的問題,保證應用程式能夠安全的運行,所以對輸入的數據進行驗證是非常有必要的。 剛開始學代碼的時候,我是這樣進行數據校驗的 看上去是不是很醜陋...,表單數據多的時候往往能寫上幾百上千行的if判斷語句。並且每個需要保存更新數據的地方都 ...


為了保證用戶輸入系統的數據是有效的,同時也是為了避免程式出現不可預期的問題,保證應用程式能夠安全的運行,所以對輸入的數據進行驗證是非常有必要的。
剛開始學代碼的時候,我是這樣進行數據校驗的

看上去是不是很醜陋...,表單數據多的時候往往能寫上幾百上千行的if判斷語句。並且每個需要保存更新數據的地方都需要編寫這樣的驗證代碼...
後來,稍微學會點了偷懶的技巧,把數據的驗證放到了對象里,這樣客戶端每次只需要調用驗證方法就可以對數據進行驗證。

public IEnumerable<Tuple<bool, string>> Validate()
{
    if (string.IsNullOrEmpty(Name))
    {
        yield return new Tuple<bool, string>(false, "客戶姓名不允許為空!");
    }
    if (Age > 0 && Age <= 120)
    {
        yield return new Tuple<bool, string>(false, "年齡的有效範圍是1~120歲!");
    }
    if (string.IsNullOrEmpty(Phone))
    {
        yield return new Tuple<bool, string>(false, "電話號碼不允許為空!");
    }

    //... 以下還有一百行代碼
}

// 客戶端調用代碼
foreach (var item in custom.Validate())
{
    if (!item.Item1)
    {
        Console.WriteLine(item.Item2);
        return;
    }
}

再後來,看到了別人通過給對象成員添加校驗特性,在提交數據時通過反射獲取對象成員聲明的特性進行校驗,進一步簡化了代碼。你可以自己去定義數據驗證的相關驗證特性類和驗證處理的代碼,但作為一個懶人,我通過使用.NET提供的System.ComponentModel.DataAnnotations.dll庫中的校驗特性和驗證處理類就可以很簡單的實現數據的校驗。如果你之前寫過ASP.NET MVC相關的代碼,應該對他比較熟悉

    public class Custom
    {
        [Required]
        public string Name { get; set; }
        [Required]
        [Range(0, 2)]
        public int Sex { get; set; }
        [Required]
        [MaxLength(11)]
        public string Phone { get; set; }
        [Required]
        [Range(1, 120, ErrorMessage = "年齡選擇範圍1~120歲")]
        public int Age { get; set; }

        //... 以下還有一百行代碼
    }

關於更多的System.ComponentModel.DataAnnotations資料https://docs.microsoft.com/zh-cn/dotnet/api/system.componentmodel.dataannotations?view=net-6.0


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 又到了每日分享Python小技巧的時候了,今天給大家分享如何實現視頻、音樂、圖片下載自由的教程吧,我自己覺得灰常好用,所以把它分享給大家,因為好東西需要大家一起學。 1、實戰效果 •接下來下冰冰圖片 you-get https://inews.gtimg.com/newsapp_bt/0/13122 ...
  • 廢話不多說,直接上代碼 from selenium import webdriver from selenium.webdriver import ChromeOptions import time import re from selenium.webdriver.support import e ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • 線性數據結構 線性結構是一個有序數據元素的集合。 常用的線性結構 線性表,棧,隊列,雙隊列,串(一維數組)。 非線性數據結構 關於廣義表、數組(高維),是一種非線性的數據結構。 常見的非線性結構有:二維數組,多維數組,廣義表,樹(二叉樹等),圖 線性表(線性存儲結構) 將具有“一對一”關係的數據“線 ...
  • 在 M1 Mac 上開始使用 .NET MAUI 開發 (iOS) 的最簡單方法。 .NET 多平臺應用程式 UI (.NET MAUI) 是一個跨平臺框架,用於使用 C# 和 XAML 創建本機移動和桌面應用程式,這些應用程式可以從單個共用代碼庫在 Android、iOS、macOS 和 Wind ...
  • 一 SECS-II 概述 SECS-II 標准定義了使用如SECS-I、HSMS等傳輸協議在設備和主機之間交換的消息的形式和含義。 定義了以消息的形式在設備和主機之間傳遞信息,消息按其行為分類,稱為Stream。有很多不同的行為Stream,每個Stream又包括具體的消息,稱為Function。 ...
  • CSV(Comma Separated Values)文件是一種純文本文件,包含用逗號分隔的數據,常用於將數據從一個應用程式導入或導出到另一個應用程式。通過將CSV文件轉為EXCEL,可執行更多關於數據編輯、格式設置等操作。下麵,將通過C#及VB.NET代碼展示如何來實現轉換。 一、程式環境 可通過 ...
  • 不管我們開發是基於Asp.net core 還是.net core,或者還是.net framework的相關應用,如果有一個比較全面的公用類庫以及相關的擴展函數來支撐,我們開發項目上會節省很多相關的處理方法查詢和封裝。本篇隨筆主要針對性的介紹基於一些對象進行擴展函數的封裝帶來的便利性進行說明,畢竟... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...