【问题标题】:How can I can simple validators (not property specific) inside a fluent validator class?如何在流利的验证器类中使用简单的验证器(不是特定于属性的)?
【发布时间】:2015-05-30 11:03:55
【问题描述】:

我正在为 .net 使用流利的验证器,它可以很好地验证我的对象的所有属性的状态,如下所示:

RuleFor(h => h.Applications).NotEmpty().WithName("Applications");

RuleFor(h => h.OwnerId).GreaterThan(0).WithMessage("You need to choose a owner");

但我发现自己在我的 Controller 类中添加了额外的验证逻辑(在我的 fluent 验证器类之外)添加了如下代码以阻塞额外的验证(不是特定于属性的)

 if (!Model.IsEntitledToEdit(project))
 {
    ModelState.AddModelError(string.Empty, "You are not entitled to save changes.");
}

有没有办法将这种类型的验证合并到一个流利的验证器类中(这样我就可以将我的所有验证保存在一个地方)

【问题讨论】:

    标签: c# asp.net-mvc validation fluentvalidation


    【解决方案1】:

    如果你能以属性的形式调用你的方法,那么你就可以做到。

    例如:

    RuleFor(h => h.CanEditFooProjects).Equals(true).WithMessage("You are not entitled to save changes.");
    

    不过,我猜是这样的代码:

    if (!Model.IsEntitledToEdit(project))
    

    ... 可能正在检查编辑“项目”对象的授权。

    您可以将业务逻辑包装在属性 getter 中...

    public bool CanEditFooProjects {
        get { 
            if( {some condition}) 
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }
    

    ...那么您可以将 FluentValidation 规则简单地定义在一个地方。

    【讨论】:

      猜你喜欢
      • 2016-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-24
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多