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

本文关键字:注释 属性 数据 自定义 验证 | 更新日期: 2023-09-27 18:14:04

我正在尝试使用数据注释进行自定义验证。试图使属性,我遵循的问题:如何创建自定义数据注释验证器

我的属性是这样的

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继承,但它不工作。

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

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

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

我对此进行了测试,它使用所提供的语法表现得与广告中的一样。

编辑

根据下面的注释,使用下面的重载可以正确地验证所有属性,包括那些使用自定义属性的属性:

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