驗(yàn)證應(yīng)貫穿輸入層、業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層。1. 輸入層用數(shù)據(jù)注解(如[Required]、[EmailAddress])結(jié)合ModelState.IsValid攔截?zé)o效請(qǐng)求;2. 服務(wù)層檢查業(yè)務(wù)規(guī)則(如郵箱唯一性、狀態(tài)合法性)并拋出相應(yīng)異常;3. 數(shù)據(jù)庫通過主鍵、唯一約束、CHECK等確保數(shù)據(jù)完整性,EF Core可在OnModelCreating中配置。各層協(xié)同防御,保障數(shù)據(jù)合法安全。
在C#中實(shí)現(xiàn)數(shù)據(jù)庫數(shù)據(jù)的驗(yàn)證,核心目標(biāo)是確保進(jìn)入數(shù)據(jù)庫的數(shù)據(jù)合法、完整、安全。驗(yàn)證通常不只在一個(gè)階段完成,而是貫穿整個(gè)應(yīng)用流程,尤其集中在輸入層和業(yè)務(wù)邏輯層,數(shù)據(jù)庫本身也可設(shè)置約束作為最后一道防線。
這是第一道防線,盡早發(fā)現(xiàn)錯(cuò)誤,提升用戶體驗(yàn)。
? 使用數(shù)據(jù)注解(Data Annotations)對(duì)模型進(jìn)行標(biāo)記,常用于ASP.NET Core Web API或MVC:
public class User { [Required(ErrorMessage = "姓名不能為空")] [StringLength(50, MinimumLength = 2, ErrorMessage = "姓名長度必須在2-50之間")] public string Name { get; set; } [EmailAddress(ErrorMessage = "郵箱格式不正確")] public string Email { get; set; } [Range(18, 100, ErrorMessage = "年齡必須在18到100之間")] public int Age { get; set; } }
[HttpPost] public IActionResult CreateUser(User user) { if (!ModelState.IsValid) { return BadRequest(ModelState); } // 繼續(xù)處理 }
輸入驗(yàn)證不能完全依賴屬性注解,復(fù)雜規(guī)則需在服務(wù)層手動(dòng)檢查。
? 檢查業(yè)務(wù)規(guī)則,例如“用戶名不能重復(fù)”:
public async Task<bool> CreateUserService(User user) { var existingUser = await _userRepository.GetByEmailAsync(user.Email); if (existingUser != null) { throw new InvalidOperationException("該郵箱已被注冊(cè)"); } // 其他業(yè)務(wù)規(guī)則... await _userRepository.AddAsync(user); return true; }
即使上層驗(yàn)證完備,數(shù)據(jù)庫仍應(yīng)設(shè)置約束,防止非法數(shù)據(jù)直接繞過應(yīng)用寫入。
? 使用數(shù)據(jù)庫的:
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<User>() .HasIndex(u => u.Email) .IsUnique(); modelBuilder.Entity<User>() .Property(u => u.Age) .HasDefaultValue(18) .IsRequired(); }
理想情況下,驗(yàn)證是分層進(jìn)行的:
不能只依賴某一層。例如,僅靠數(shù)據(jù)庫唯一約束會(huì)拋出異常,體驗(yàn)差;而只做前端驗(yàn)證容易被繞過。
基本上就這些。關(guān)鍵是層層設(shè)防,早發(fā)現(xiàn)早處理,同時(shí)保障安全與數(shù)據(jù)完整性。以上就是如何用C#實(shí)現(xiàn)數(shù)據(jù)庫數(shù)據(jù)的驗(yàn)證?在什么階段進(jìn)行?的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
每個(gè)人都需要一臺(tái)速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊(cè)表數(shù)據(jù)和不必要的后臺(tái)進(jìn)程會(huì)占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)