MustAsync() 与 WhenAsync() FluentValidation 方法之间的区别

Differences between methods MustAsync() vs WhenAsync() FluentValidation

我使用 .net 5 实现了一个 API 并且我使用了 NuGet FluentValidation。 我试图了解这两种方法有什么区别

MustAsync()

WhenAsync()

我什么时候必须使用它们中的每一个。能举个例子就更好了

WhenAsync() 方法:指定一个异步条件限制验证器应该 运行 的时间。仅当 lambda 的结果 returns 为真时才会执行验证器。

MustAsync() 方法:在当前规则生成器上定义异步谓词验证器,使用 lambda 表达式指定谓词。如果指定的 lambda returns 为假,验证将失败。如果指定的 lambda returns 为真,验证将成功。

你可以去方法定义里查看这些方法的使用情况

以上两种方法都是用来定义异步规则的,例如下面的代码会检查用户ID是否已经存在:

public class CustomerValidator : AbstractValidator<Customer> {
  SomeExternalWebApiClient _client;

  public CustomerValidator(SomeExternalWebApiClient client) {
    _client = client;

    RuleFor(x => x.Id).MustAsync(async (id, cancellation) => {
      bool exists = await _client.IdExists(id);
      return !exists;
    }).WithMessage("ID Must be unique");
  }
}

然后,通过调用 ValidateAsync 方法来调用验证器。

var validator = new CustomerValidator(new SomeExternalWebApiClient());
var result = await validator.ValidateAsync(customer);

更多详细信息,请参考以下文章:

Asynchronous Validation

FluentValidation