C# FluentValidation和自定义消息,告诉用户允许/期望哪些值

C# FluentValidation和自定义消息,告诉用户允许/期望哪些值,c#,fluentvalidation,C#,Fluentvalidation,考虑以下验证器,它按预期工作: public class NewOrderSingleValidator : AbstractValidator<NewOrderSingle> { public NewOrderSingleValidator() { RuleFor(o => o.OrdType.getValue()) .Must(p => p == OrdType.LIMIT || p == OrdType.MAR

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

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());
    }
}

这将生成以下消息(或类似消息):
错误!提供值:FOO!预期限制或市场

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

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
占位符将被提供给相应用户的值替换。一些内置的占位符不仅仅是
PropertyValue
PropertyName

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());