我使用FluentValidation 3
,当我使用重载的WithMessage方法时,我遇到了一个奇怪的问题。
复合格式字符串格式不正确。我的格式字符串中出现“true
”而不是{0}
。所有其他格式项都不会被替换。
例如:
public class MyModelValidator : AbstractValidator<MyModel>
{
public MyModelValidator()
{
RuleFor(x => x.Caption).NotNull().WithMessage("{0} ----- {1}", "one", "two" );
}
}
我获得的验证字符串是:“true----- {1}
”而不是“one----- two
”。
你能解释一下我的代码有什么问题吗?
答案 0 :(得分:1)
嗯,源代码中的响应是......
你使用WithMessage
的这个重载(我必须说它的用法并不是很清楚):
public static IRuleBuilderOptions<T, TProperty> WithMessage<T, TProperty>(this IRuleBuilderOptions<T, TProperty> rule, string errorMessage, params object[] formatArgs) {
var funcs = ConvertArrayOfObjectsToArrayOfDelegates<T>(formatArgs);
return rule.WithMessage(errorMessage, funcs);
}
所以“一个”和“两个”被更改为Func<T, object>
的数组,当然,这将导致您的代码出现奇怪的行为......
您应该在案件中使用string.Format
WithMessage(string.Format("{0} ----- {1}", "one", "two" ));
顺便说一句,FluentValidation消息“已经预先格式化”:
在WithMessage中使用{0}
的目的是修改{0}
周围的文本。
例如,NotNull具有“1参数”预格式化消息。
这就是为什么你的{0}
转变为“真实”的原因,我认为。