问题描述
我正在浏览一个材料,自定义验证逻辑的代码如下:-
public class MaxAttribute : ValidationAttribute
{
public MaxAttribute(int maxWords) : base("{0} has too many words.")
{
_maxWords = maxWords;
}
public override ValidationResult IsValid(object value,ValidationContext validationContext)
{
if(value != null)
{
var valueAsString = value.ToString();
if(valueAsString.Split(' ').Length > _maxWords)
{
var errorMessage = FormatErrorMessage(validationContext.DisplayName);
return new ValidationResult(errorMessage);
}
}
return ValidationResult.Success;
}
private readonly int _maxWords;
}
它说,
占位符存在调用继承的FormatErrorMessage方法,将使用属性的显示名称自动格式化字符串。"
我无法想象流程会是什么样子? 我只知道当我输入这个词时,
[MaxWords(10)]
public string Name{get;set}
MaxWordsAttribute(int maxWords) 构造函数将被调用,该构造函数将调用基础构造函数 :base({0}...) FormatErrorMessage 的调用将在何时以及如何填充占位符?
解决方法
要查看的地方是对 FormatErrorMessage
的调用:这是构造错误消息的地方。所以let's take a look:
public virtual string FormatErrorMessage(string name) =>
string.Format(CultureInfo.CurrentCulture,ErrorMessageString,name);
那个 ErrorMessageString
是您传递给基本构造函数的字符串(在 slightly roundabout way 中)。