自定义数据注释属性未经过验证

时间:2014-07-22 16:25:52

标签: c# validation data-annotations

我正在尝试使用数据注释进行自定义验证。 尝试制作属性,我已经按照以下问题: How to create Custom Data Annotation Validators

我的属性看起来像这样

internal class ExcludeDefaultAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        return false;
    }
}

并通过以下方式调用验证:

internal static class TypeValidator
{
    static public bool Validate(object item)
    {
        List<ValidationResult> results = new List<ValidationResult>();
        ValidationContext context = new ValidationContext(item);
        if (Validator.TryValidateObject(item, context, results))
        {
            return true;
        }
        else
        {
            string message = string.Format("Error validating item");
            throw new TypeInvalidException(results, message);
        }
    }
}

所以,这是问题所在。我的自定义验证目前应始终返回false。因此验证应始终失败。但是,每当我尝试在字段上验证具有此属性的对象时,它都会通过验证,这表明我的自定义验证属性未被评估。我不想在验证中做任何实际逻辑,直到我知道它实际上正在运行。 我错过了什么吗?我的所有研究都说我只需要从ValidationAttribute继承,但它不起作用。

1 个答案:

答案 0 :(得分:1)

根据MSDN article,TryValidateObject方法将执行以下操作:

  

此方法评估附加到对象类型的每个ValidationAttribute实例。它还检查是否提供了标记为RequiredAttribute的每个属性。它不会递归验证对象的属性值。

我对此进行了测试,其行为与使用提供的语法所宣传的相同。

修改

根据以下评论,使用以下重载会导致所有属性的正确验证,包括使用自定义属性的属性:

TryValidateObject(object instance, ValidationContext validationContext, ICollection<ValidationResult> validationResults, bool validateAllProperties)