如何在FluentValidation中不使用WithMessage方法添加错误消息
解决方案
FluentValidation完全支持不调用WithMessage()就给ValidationResult添加自定义错误,常用的实现方式有以下两种:
1. 直接操作ValidationResult实例
适合在校验逻辑执行完毕后,基于独立的业务条件追加错误的场景。你可以直接修改ValidationResult的Errors集合,不需要依赖原有校验规则:
// 先执行原有校验逻辑 var validator = new YourModelValidator(); var result = validator.Validate(yourModelInstance); // 独立业务条件判断,和待校验类属性无关 if (DateTime.Now.DayOfWeek == DayOfWeek.Monday) { // 第一个参数为关联属性名,不需要关联的话传空字符串即可 result.Errors.Add(new ValidationFailure("", "周一不允许提交数据")); }
2. 在校验器内通过Custom方法全局注入校验逻辑
适合自定义逻辑和校验器绑定的场景,不需要绑定到特定属性,也不需要调用WithMessage:
public class YourModelValidator : AbstractValidator<YourModel> { public YourModelValidator() { // 原有属性校验规则 RuleFor(x => x.Age).GreaterThan(18); // 全局自定义校验逻辑 Custom(model => { // 你的自定义条件,不需要访问model属性也可以 if (/* 业务判断条件 */) { return new ValidationFailure("", "自定义全局错误消息"); } return null; }); } }
调用validator.Validate()方法后,返回的结果会自动包含上述自定义错误。
注意事项
如果不需要将错误绑定到特定的模型属性,ValidationFailure的第一个参数(属性名)传空字符串即可,适合全局提示类的错误场景。
内容的提问来源于stack exchange,提问作者john-lenon-dos-reis
相关产品推荐
相关产品推荐

