我正在使用FluentValidation进行服务器端验证。现在我已经让它在必须验证之前调用了一个函数:
RuleFor(x => x.UserProfile).Must(ValidateProfile).WithMessage("We are sorry, you have already logged on " + DateTime.Now + ". Please come again tomorrow.");
现在,这是有效的,因为validateProfile采用的唯一参数是UserProfile。一切都很好。
我现在的问题是我正在尝试使用两个参数来验证数据。我尝试用于验证的功能如下所示:
bool IsValid(string promocode, IUserProfile userProfile)
现在,我不确定如何将IsValid绑定到fluentValidation。有什么想法吗?
答案 0 :(得分:14)
促销代码从何而来? Must方法有重载接受Func<TProp,bool>
,Func<T,TProp,bool>
和Func<T,TProp, PropertyValidatorContext, bool>
如果promocode是要验证的对象的属性,则很容易传递类似
的内容 .RuleFor(x => x.UserProfile).Must( (o, userProfile) => { return IsValid(o.promoCode, userProfile); })
答案 1 :(得分:1)
//with MustAsync
RuleFor(v => v.UserId).MustAsync(
async (model, userId, cancellation) =>
{
return await IsValid(model.PromoCode, userId, cancellation);
}
).WithMessage("{PropertyName} message.");
private async Task<bool> IsUniqueUserNameAsync(string promoCode, string userId, CancellationToken cancellationToken)
{
throw new NotImplementedException();
}