首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何创建带有特定验证错误消息的自定义FluentValidation PropertyValidator?

如何创建带有特定验证错误消息的自定义FluentValidation PropertyValidator?
EN

Stack Overflow用户
提问于 2016-01-06 03:40:28
回答 1查看 1.7K关注 0票数 1

我有几个不同的类具有string类型的Name属性,但是在每种情况下验证名称的规则都是相同的,例如不能为null,在1到32个字符之间,不能包含某些无效/符号字符等等。

我正在使用FluentValidation库进行验证。我对它很陌生,但就像我迄今所看到的一样。首先,为对象模型中的每个类创建AbstractValidator<T>派生验证类,以验证它们的属性。我很快意识到,我正在复制代码以验证各个类的名称属性,因此决定创建一个NameValidator自定义属性验证器(即自定义PropertyValidator派生类)。目的是将四五个重复的名称验证逻辑封装在一个地方。

但是,我不喜欢这个解决方案(基于我的新手理解),因为我不能根据验证失败的条件指定不同的特定验证错误消息,因为错误消息必须在构造函数中定义并传递给基类。换句话说,验证错误消息绑定到类类型,而不是IsValid(...)覆盖中的运行时逻辑。例如,如果名称太长,我想提供一条具体的消息,说明是这样的,而不是一条复合消息,它说验证失败的原因有十几个,让用户找出哪一个才是真正的罪魁祸首。也许这是可能的,我只是忽略了它,或者属性验证器根本不打算支持多种类型的验证的概念。

我考虑的下一个方法是创建一个NameValidator类,该类从AbstractValidator<string>派生,并使用表单:RuleFor(name => name).Foo(...)等的各种RuleFor语句,这有助于定义特定的验证错误消息。但是,这“感觉不对”,因为AbstractValidator<T>用于验证对象,而PropertyValidator则用于验证属性。如能就这一方法的有效性(或其他方面)提出任何想法/建议,将不胜感激。

因此,我的问题是,使用FluentValidation库以可重用的方式将各种属性验证逻辑封装在一起的推荐方法是什么,同时保持提供非常具体的验证错误消息的能力,准确描述某些验证失败的原因?

EN

回答 1

Stack Overflow用户

发布于 2016-01-06 09:31:43

如果是我,我会使用NameValidator : AbstractValidator<string>方法。Name符合太多的需求这一事实使它本身成为一个对象。

在语义上,PropertyValidator也用于表示单个类型的约束,而不是对象的单个属性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34625248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档