【问题标题】:Using IValidatableObject to check if at-least one parameter is set使用 IValidatableObject 检查是否设置了至少一个参数
【发布时间】:2022-01-11 20:24:51
【问题描述】:

我有一个 UpdateAccountRequest 对象,它代表一个 PUT 请求正文来更新现有的 Account 对象。目前,可以使用此端点更新的唯一属性是 Disabled 属性。为了确保调用者没有发送空的UpdateAccountRequest 请求,我使用IValidateObject 接口,如下所示:

public class UpdateAccountRequest: IValidatableObject
{
    public bool? Disabled { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (!Disabled.HasValue)
        {
            yield return new ValidationResult("Disabled must be set");
        }
    }
}

但是,在未来,我计划向这个类添加更多属性,并且我想创建一个通用方法来验证调用者是否指定了至少 一个 更新属性。我可以通过检查所有实例的属性并检查它们的类型并查看它们是否不为空来使用反射来实现这一点,但我想知道框架中是否有一些东西可以实现这一点。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-core


    【解决方案1】:

    所以我想出了这样的东西。不是我最自豪的创作,但它似乎奏效了。不确定框架是否支持这种开箱即用的功能。

    public class UpdateAccountRequest: IValidatableObject
    {
        public bool? Disabled { get; set; }
    
        public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
            var satisfiedMembers = this.GetType().GetProperties()
                              .Select(prop => prop.GetValue(this, null))
                              .Where(val => val != null);
                
            if (!satisfiedMembers.Any())
            {
                    yield return new ValidationResult("At-least one update parameter must be supplied");
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-05-02
      • 1970-01-01
      • 2020-05-22
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-17
      • 1970-01-01
      相关资源
      最近更新 更多