首页 > 后端开发 > C++ > 如何使用ivalidatableObject在ASP.NET核心中实现条件验证?

如何使用ivalidatableObject在ASP.NET核心中实现条件验证?

DDD
发布: 2025-01-28 11:46:10
原创
714 人浏览过

How to Implement Conditional Validation in ASP.NET Core using IValidatableObject?

在ASP.NET Core中使用IValidatableObject实现条件验证

IValidatableObject接口是进行ASP.NET Core对象验证的实用工具。它允许您定义自定义验证规则,这些规则可以比较属性,或处理条件验证场景。

该接口的一个常见用例是仅在特定条件下验证某些属性。例如,以下代码片段演示了一个对象,其属性Prop1和Prop2只有在设置标志Enable时才应进行验证:

public class ValidateMe : IValidatableObject
{
    [Required]
    public bool Enable { get; set; }
    [Range(1, 5)]
    public int Prop1 { get; set; }
    [Range(1, 5)]
    public int Prop2 { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (!this.Enable)
        {
            // 返回有效结果
            yield break;
        }
        else
        {
            // 检查Prop1和Prop2是否满足其范围要求,并相应地返回结果
            if (this.Prop1 < 1 || this.Prop1 > 5)
            {
                yield return new ValidationResult("Prop1必须在1到5之间", new[] { "Prop1" });
            }
            if (this.Prop2 < 1 || this.Prop2 > 5)
            {
                yield return new ValidationResult("Prop2必须在1到5之间", new[] { "Prop2" });
            }
        }
    }
}
登录后复制

这种方法并非在所有情况下都最合适,因为它需要在Validate()方法中检查Enable标志并手动返回有效结果。

另一种方法是在Validate()方法中使用Validator.TryValidateProperty()方法。此方法允许您为特定属性指定验证上下文:

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
    var results = new List<ValidationResult>();
    if (this.Enable)
    {
        Validator.TryValidateProperty(this.Prop1,
            new ValidationContext(this, null, null) { MemberName = "Prop1" },
            results);
        Validator.TryValidateProperty(this.Prop2,
            new ValidationContext(this, null, null) { MemberName = "Prop2" },
            results);

        // 其他随机测试
        if (this.Prop1 > this.Prop2)
        {
            results.Add(new ValidationResult("Prop1必须大于Prop2", new[] { "Prop1", "Prop2" }));
        }
    }
    return results;
}
登录后复制

在这种情况下,只有在验证失败时,Validator.TryValidateProperty()方法才会将验证结果添加到results集合中。通过使用此方法,您可以根据对象的状体有条件地验证属性,使您的验证逻辑更灵活、更易于维护。 注意,这里对ValidationResult添加了MemberNames,以便更清晰地指出错误的属性。

以上是如何使用ivalidatableObject在ASP.NET核心中实现条件验证?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板