在开发 ASP.NET Core Web 应用程序时,我们经常需要对用户提交的数据进行验证,以确保其符合业务逻辑或安全要求。虽然框架内置了如 [Required]、[StringLength] 等常用验证特性,但在实际项目中,这些往往不够用。这时,我们就需要通过自定义验证规则来扩展模型验证能力。
本文将带你从零开始,使用 C# 编写一个完整的 ASP.NET Core 模型验证自定义规则 示例,即使是初学者也能轻松上手!
假设你正在开发一个用户注册功能,要求用户名不能包含某些敏感词(如 "admin"、"root")。这种业务逻辑无法通过内置的 [RegularExpression] 或其他标准特性直接实现,因此我们需要创建自己的验证特性。
在 C# 中,我们可以通过继承 ValidationAttribute 类来创建自定义验证规则。
下面是一个禁止特定关键词的验证特性示例:
using System;using System.ComponentModel.DataAnnotations;public class NoForbiddenWordsAttribute : ValidationAttribute{ private readonly string[] _forbiddenWords = { "admin", "root", "superuser" }; protected override ValidationResult IsValid(object value, ValidationContext validationContext) { if (value == null) return ValidationResult.Success; string input = value.ToString(); foreach (var word in _forbiddenWords) { if (input.Contains(word, StringComparison.OrdinalIgnoreCase)) { return new ValidationResult($"用户名不能包含敏感词 '{word}'。"); } } return ValidationResult.Success; }} 这段代码定义了一个名为 NoForbiddenWordsAttribute 的自定义验证特性,它会检查输入字符串是否包含预设的敏感词(不区分大小写)。
接下来,我们将这个特性应用到我们的用户注册模型上:
public class RegisterModel{ [Required(ErrorMessage = "用户名不能为空")] [StringLength(20, MinimumLength = 3, ErrorMessage = "用户名长度应在3到20个字符之间")] [NoForbiddenWords] // ← 使用自定义验证 public string Username { get; set; } [Required] [EmailAddress] public string Email { get; set; }} 在 ASP.NET Core 控制器中,框架会自动执行模型验证。我们只需检查 ModelState.IsValid 即可:
[HttpPost]public IActionResult Register(RegisterModel model){ if (!ModelState.IsValid) { // 验证失败,返回错误信息 return View(model); } // 验证通过,执行注册逻辑 // ... return RedirectToAction("Success");} 当用户输入如 "MyAdminUser" 这样的用户名时,ModelState 将包含一条错误信息:“用户名不能包含敏感词 'admin'。”,前端页面可通过 @Html.ValidationMessageFor(m => m.Username) 显示该提示。
如果你的验证逻辑需要访问数据库(例如检查用户名是否已存在),可以实现 IValidatableObject 接口,或使用更高级的 IClientModelValidator + 依赖注入方式。但对大多数场景,继承 ValidationAttribute 已足够。
通过本文,你已经学会了如何在 ASP.NET Core 中创建和使用 自定义验证规则。这不仅提升了数据校验的灵活性,也让你的代码更加清晰和可维护。记住,良好的模型验证是构建安全可靠 Web 应用的第一道防线。
关键词回顾:
希望这篇教程对你有帮助!欢迎在项目中实践这些技巧。
本文由主机测评网于2025-12-20发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/20251210500.html