.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
相关产品推荐
相关产品推荐

