You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 10:20:42