10

我正在使用 FluentValidation 进行服务器端验证。现在我已经通过 Must 验证让它调用了一个函数:

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。有任何想法吗?

4

2 回答 2

17

促销代码来自哪里?Func<TProp,bool>Must 方法具有接受、Func<T,TProp,bool>和的重载Func<T,TProp, PropertyValidatorContext, bool>

如果促销代码是正在验证的对象的属性,则很容易传递类似

 .RuleFor(x => x.UserProfile).Must( (o, userProfile) => { return IsValid(o.promoCode, userProfile); })
于 2013-06-17T19:58:35.920 回答
3
//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();
    }
于 2021-01-08T09:03:23.933 回答