验证与ValidateAsync

时间:2016-11-30 03:32:22

标签: fluentvalidation

在FluentValidation中,有两种版本的验证方法:Validate和ValidateAsync。

我对异步版本感到困惑,为什么我们需要在普通验证API中使用它。我认为异步在CPU绑定操作中是无用的,看起来这个验证不会涉及任何IO东西。

是否有任何情况我们会使用异步版本而不是同步版本?

2 个答案:

答案 0 :(得分:0)

实际上,您可以使用异步版本来检查服务器的验证,例如,检查电子邮件或密码是否唯一。

答案 1 :(得分:0)

documentation 中所述,只要您使用 MustAsyncCustomAsync 定义自定义规则,以及使用 WhenAsync 定义异步条件,都应调用异步版本.
下面是一个例子:

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");
  }
}

了解在使用 automatic validation with ASP.NET不应使用异步规则也很重要,因为 ASP.NET 的验证管道不是异步的。如果您将异步规则与 ASP.NET 的自动验证一起使用,它们将始终同步运行。