c# – 验证器忽略MaxLength属性
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 验证器忽略MaxLength属性,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1451字,纯文字阅读大概需要3分钟。
内容图文
![c# – 验证器忽略MaxLength属性](/upload/InfoBanner/zyjiaocheng/811/22079990bf3f42678badfb2da0d7f154.jpg)
问题:
我试图手动验证一些c#对象,并且Validator忽略与字符串长度相关的验证.
测试用例:
扩展this example使用[Required]属性,我也想验证字符串不是太长,如下所示.
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");
}
}
预期结果:错误:“难度太长.”
实际结果:’有效’
其他测试的东西:
>验证器正在工作,取消注释消息“名称字段是必需的”中的[必需]结果.
>改为使用[StringLength](如上所述)
在https://stackoverflow.com/a/6802739/432976)没有任何区别.
解决方法:
您需要进行2次更改才能使验证按预期方式工作:
1.您必须将难度字段更改为属性.
Validator类仅验证属性,因此将难度定义更改为如下属性:
[MaxLength(1)] public string difficulty { get; set; } = "a_string_that_is_too_long";
2.为Validator.TryValidateObject调用指定validateAllProperties:true参数.
Validator.TryValidateObject的documentation并不是即将发布的事实,除非你使用validateAllProperties:true的重载,否则只会检查Required属性.所以修改这样的调用:
var isValid = Validator.TryValidateObject(recipe,
context,
results,
validateAllProperties: true);
内容总结
以上是互联网集市为您收集整理的c# – 验证器忽略MaxLength属性全部内容,希望文章能够帮你解决c# – 验证器忽略MaxLength属性所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。