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

.NET Core:服务器端设置带MaxLength验证属性的值未抛出异常

问题原因与解决方案

DataAnnotations(比如[MaxLength])默认不会在对象属性赋值时自动触发验证,它们仅在特定场景(如MVC模型绑定、EF Core执行SaveChanges)才会被框架自动验证。如果需要在赋值时直接抛出异常,需要手动触发验证逻辑,或者修改属性setter内置验证。

方案1:手动触发对象级验证

在创建Student实例并赋值后,调用Validator.ValidateObject强制验证所有属性,不符合规则时会直接抛出ValidationException:

using System.ComponentModel.DataAnnotations;

[HttpPost("AddStudent")]
public IActionResult AddStudent()
{
    string studentName = System.IO.File.ReadAllText(@"C:\StudentName.txt");

    Student student = new Student()
    {
        Id = Guid.NewGuid(),
        Name = studentName, // Name larger than 40 char
    };            

    // 手动触发全属性验证
    var validationContext = new ValidationContext(student);
    Validator.ValidateObject(student, validationContext, validateAllProperties: true);

    //Add student to DB
    return Ok();
}

方案2:在属性setter中内置验证

修改Student类的Name属性,在赋值时直接验证输入值,不符合规则立即抛出异常:

using System.ComponentModel.DataAnnotations;

public class Student
{
    public Guid Id { get; set; }

    private string _name;

    [MaxLength(40, ErrorMessage ="too long")]
    public string Name
    {
        get => _name;
        set
        {
            // 针对当前属性单独验证
            var validationContext = new ValidationContext(this) { MemberName = nameof(Name) };
            Validator.ValidateProperty(value, validationContext);
            _name = value;
        }
    }
}

这样每次给Name赋值时,都会自动执行验证逻辑,超长时直接抛出ValidationException。

内容的提问来源于stack exchange,提问作者Mahmoud Alakrami

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 18:13:24