感谢@sebastian.roibu 的回答,我想分享我的解决方案,因为他的回答对我来说是不完整的,希望这可以节省您弄清楚它的时间。
我必须先创建一个单独的CustomValidator: AbstractValidator
类。这个类有Validate()
方法。
接下来,Validate() 方法将自己“什么都不做”,您需要查看 return ( ValidationResult
),它会包含所有错误CustomValidator
从 ValidationResult 我能够获取该 1 属性的所有错误,并将其附加到我当前没有以这种方式验证的上下文中。
这是我使用 JsonPatchDocument 验证“PATCH”操作的完整答案:
public PatchCommandValidator()
{
RuleForEach(x => x.JsonPatchDocument.Operations)
.CustomAsync(HandleOperationValidation);
}
private async Task HandleOperationValidation(Operation<BasketHeaderPatchModel> property, ValidationContext<PatchBasketHeaderCommand> context, CancellationToken cancellation)
{
var requestModel = new RequestModel();
var propertyInfo = requestModel.GetType().GetProperty(property.path.Replace("/", ""));
propertyInfo.SetValue(basketHeaderPatchModel, Convert.ChangeType(property.value, propertyInfo.PropertyType));
var customValidator = new CustomValidator();
var result = await customValidator.ValidateAsync(requestModel , x => x.IncludeProperties(propertyInfo.Name), cancellation);
result.Errors.ForEach(context.AddFailure);
}