问题: 我试图手动验证一些c#对象,而Validator忽略了与字符串长度相关的验证。
测试用例 使用[Required]属性扩展this example,我还想验证字符串不是太长,如下所示。
public class Recipe
{
//[Required]
public string Name { get; set; }
[MaxLength(1)] public string difficulty = "a_string_that_is_too_long";
}
public static void Main(string[] args)
{
var recipe = new Recipe();
var context = new ValidationContext(recipe, serviceProvider: null, items: null);
var results = new List<ValidationResult>();
var isValid = Validator.TryValidateObject(recipe, context, results);
if (!isValid)
{
foreach (var validationResult in results)
{
Console.WriteLine(validationResult.ErrorMessage);
}
} else {
Console.WriteLine("is valid");
}
}
预期结果:错误:“难度太长。”
实际结果:'有效'
其他测试事项:
答案 0 :(得分:5)
您需要进行2次更改才能使验证按预期方式工作:
<强> 1。您必须将difficulty
字段更改为属性。
Validator
类仅验证属性,因此将difficulty
定义更改为如下属性:
[MaxLength(1)] public string difficulty { get; set; } = "a_string_that_is_too_long";
<强> 2。指定validateAllProperties: true
来电的Validator.TryValidateObject
参数。
Validator.TryValidateObject
的{{3}}并非即将发布,除非您使用validateAllProperties: true
重载,否则只会检查Required
属性。所以修改这样的调用:
var isValid = Validator.TryValidateObject(recipe,
context,
results,
validateAllProperties: true);