如何在非ASP.NET网络环境中使用C#中的数据验证属性?

Chr*_*all 31 c# validation data-annotations

我想在库程序集中使用数据验证属性,这样数据的任何使用者都可以在不使用ModelBinder的情况下对其进行验证(例如,在控制台应用程序中).我该怎么做?

The*_*ing 51

其实这很酷.我最近在WFP验证实施中使用它.大多数人最终使用反射来编写大量代码来迭代属性,但是有一个内置函数.

var vc = new ValidationContext(myObject, null, null);
return Validator.TryValidateObject(myObject, vc, null, true);
Run Code Online (Sandbox Code Playgroud)

您还可以在单​​个命名属性上验证属性.您还可以选择传入列表以访问错误消息:

var results = new List<ValidationResult>();
var vc = new ValidationContext(myObject, null, null) { MemberName = "UserName"};
var isValid = Validator.TryValidateProperty(value, vc, results);

// get all the errors
var errors = Array.ConvertAll(results.ToArray(), o => o.ErrorMessage);
Run Code Online (Sandbox Code Playgroud)

  • 所以我终于在今天早上以正确的方式实施了这个问题.谢啦 (6认同)
  • 这是太棒了!对于那些感兴趣的人,我在[this gist](https://gist.github.com/JimmyBoh/b7c135820c18a06648a5)中使用它作为一个简单的帮助类. (3认同)
  • 嵌套对象/对象列表/等等呢?这个解决方案是非递归的,但我认为它是完全健壮的,它需要递归.内置任何东西,或者你必须手动滚动? (2认同)
  • @gzak对于嵌套项目,我构建了自己的继承自ValidationAttribute的ValidateObjectAttribute。请参阅此要点https://gist.github.com/odyth/905bcaa84d257f663eb45a55481b660b (2认同)