【问题标题】:FluentValidation and custom message that tells the user which values are allowed/expectedFluentValidation 和自定义消息,告诉用户允许/预期哪些值
【发布时间】:2020-06-15 15:08:36
【问题描述】:

考虑以下验证器,它按预期工作:

public class NewOrderSingleValidator : AbstractValidator<NewOrderSingle>
{
    public NewOrderSingleValidator()
    {
        RuleFor(o => o.OrdType.getValue())
            .Must(p => p == OrdType.LIMIT || p == OrdType.MARKET)
            .WithMessage("Provided OrdType is not allowed, the value was: {PropertyValue}")
            .When(o => o.IsSetOrdType());
    }
}

只要验证失败,验证结果就会包含错误Provided OrdType is not allowed, the value was: FOO。好,太棒了!

但现在我想知道如何才能告诉用户允许哪些值,而无需在消息中重复我的规则。

我不太明白documentation 的含义:

‘{PropertyValue}’ - 正在验证的属性的值 其中包括谓词验证器(‘Must’验证器)、电子邮件和正则表达式验证器。

我希望能够做这样的事情:

public class NewOrderSingleValidator : AbstractValidator<NewOrderSingle>
{
    public NewOrderSingleValidator()
    {
        RuleFor(o => o.OrdType.getValue())
            .Must(p => p == OrdType.LIMIT || p == OrdType.MARKET)
            .WithMessage("Error! Provided value: {PropertyValue}! Expected values: {Must}")
            .When(o => o.IsSetOrdType());
    }
}

这应该会生成以下消息(或类似消息):Error! Provided value: FOO! Expected LIMIT or MARKET

【问题讨论】:

    标签: c# fluentvalidation


    【解决方案1】:

    我认为在这种情况下,您可以尝试将代码重构为以下内容:

    var allowed = new [] {OrdType.LIMIT, OrdType.MARKET};
    RuleFor(o => o.OrdType.getValue())
            .Must(p => allowed.Contains(p))
            .WithMessage($"Error! Provided value: {{PropertyValue}}! Expected values: {string.Join(", ", allowed)}")
            .When(o => o.IsSetOrdType());
    

    我不太明白文档的含义:

    这意味着PropertyValue 占位符将被提供给相应validator 的值替换。一些内置的有更多的占位符,而不仅仅是PropertyValuePropertyName

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 2016-01-15
      • 2015-08-21
      • 1970-01-01
      相关资源
      最近更新 更多