ASP.NET中如何验证用户模型姓名字段,禁止输入含www的网址
实现方案
在ASP.NET中,你可以通过自定义验证特性来实现对FirstName和LastName字段的网址拦截需求,具体步骤如下:
1. 创建自定义验证属性
新建一个继承自ValidationAttribute的类,重写IsValid方法实现自定义校验逻辑,拦截包含www.的网址内容:
using System.ComponentModel.DataAnnotations; public class NoWebsiteAttribute : ValidationAttribute { protected override ValidationResult IsValid(object value, ValidationContext validationContext) { // 非空判断已由[Required]处理,这里只需检查有效字符串 if (value is string input && !string.IsNullOrWhiteSpace(input)) { // 基础校验:拦截包含"www."的内容 if (input.Contains("www.")) { return new ValidationResult("姓名字段禁止包含网址内容"); } } return ValidationResult.Success; } }
如果需要更严谨的网址匹配(比如拦截完整的www域名格式),可以改用正则表达式优化判断逻辑:
using System.Text.RegularExpressions; // 替换IsValid方法内的判断逻辑 var urlPattern = @"www\.\w+\.\w+"; if (Regex.IsMatch(input, urlPattern, RegexOptions.IgnoreCase)) { return new ValidationResult("姓名字段禁止包含网址内容"); }
2. 给UserModel字段添加验证属性
将自定义的[NoWebsite]特性挂载到FirstName和LastName字段上:
public class UserModel { public int UserId { get; set; } [Required] public string Login { get; set; } public string Password { get; set; } [Required] [NoWebsite] public string FirstName { get; set; } [Required] [NoWebsite] public string LastName { get; set; } }
3. 在业务逻辑中触发验证
Web控制器场景
在接口中通过ModelState.IsValid自动触发验证:
[HttpPost] public IActionResult CreateUser(UserModel model) { if (!ModelState.IsValid) { return BadRequest(ModelState); } // 验证通过,执行用户创建逻辑 return Ok(); }
非Web场景手动验证
如果是在服务层或控制台等非Web环境,可手动调用验证方法:
var model = new UserModel { FirstName = "www.test.com" }; var validationContext = new ValidationContext(model); var validationResults = new List<ValidationResult>(); bool isValid = Validator.TryValidateObject(model, validationContext, validationResults, validateAllProperties: true); if (!isValid) { foreach (var result in validationResults) { // 处理错误信息,比如打印或返回给调用方 Console.WriteLine(result.ErrorMessage); } }
内容的提问来源于stack exchange,提问作者dodo
相关产品推荐
相关产品推荐

