范围验证属性未验证

时间:2016-02-25 15:46:46

标签: c# validation data-annotations

我有一个对象,让我们这样说:

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也是真的(应该是假的)

我做错了什么?

1 个答案:

答案 0 :(得分:2)

尝试使用名为&#39; validateAllProperties&#39;的额外参数调整对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);
    }        
}