【发布时间】:2020-08-15 02:50:19
【问题描述】:
我们正在使用 fluentvalidation(带有服务堆栈)来验证我们的请求 DTO。我们最近扩展了我们的框架以接受“PATCH”请求,这意味着我们现在需要仅在补丁包含正在验证的字段时应用验证。
我们已经使用了这样的扩展方法:
RuleFor(dto => dto.FirstName).Length(1,30)).WhenFieldInPatch((MyRequest dto)=>dto.FirstName);
RuleFor(dto => dto.MiddleName).Length(1,30)).WhenFieldInPatch((MyRequest dto)=>dto.MiddleName);
RuleFor(dto => dto.LastName).Length(1,30)).WhenFieldInPatch((MyRequest dto)=>dto.LastName);
这意味着我们可以对 POST/PUT 或 PATCH 运行相同的验证。
我一直在寻找一种连接到流式验证框架的方法,例如我们不需要在验证的每一行上复制 .WhenFieldInPatch() 规则,但还没有找到一个好的方法这样做。
我尝试了以下方法:
- 创建一个辅助方法(在基类中)拦截初始“RuleFor”,该方法在前面添加了 .When() 子句,但这不起作用,因为流畅的验证需要 .When()最后
- 在 PreValidation 中拦截调用,但我只能基于整个类进行拦截,而不是逐个规则地进行拦截
- 添加扩展方法以应用于每个规则的末尾(根据示例),但我无法访问初始表达式以检查是否应映射该字段 - 所以我需要再次传递它。李>
我是错过了什么,还是在尝试不可能的事情?
谢谢
【问题讨论】:
标签: servicestack fluentvalidation