范围验证属性未验证

Range validation attribute not validating

我有一个对象,这么说吧:

public class Person{
    [Range(1, 100)]
    public int Id {get;set;}

    [Required]
    public string Name {get;set;}
}

如您所见,Id 至少应包含 1,并且名称字段是必需的。

我有这个验证方法:

private static void ValidateObject(Person obj){
    var context = new ValidationContext(obj, serviceProvider: null, items: null);
    var results = new List<ValidationResult>();

    var isValid = Validator.TryValidateObject(obj, context, results);

    if (!isValid)
    {
        throw new InvalidOperationException(results.First().ErrorMessage);
    }        
}

如果我将 Name 留空,它会抛出错误。正确的! 如果我将 Id 保留为 0,它不会抛出错误。这是我想不通的。变量isValid也是true(应该是false)

我做错了什么?

尝试使用名为 'validateAllProperties' 的额外参数调整对 Validator.TryValidateObject 的调用并将其设置为 true。如果您省略它或将其设置为 false(默认),则不会验证不需要的属性。

private static void ValidateObject(Person obj){
    var context = new ValidationContext(obj, serviceProvider: null, items: null);
    var results = new List<ValidationResult>();

    var isValid = Validator.TryValidateObject(obj, context, results, true);

    if (!isValid)
    {
        throw new InvalidOperationException(results.First().ErrorMessage);
    }        
}