From e50ff968046f452c24f9dbb997c885fd039c5c23 Mon Sep 17 00:00:00 2001 From: Julien Nigay Date: Fri, 13 May 2022 17:25:30 +0200 Subject: [PATCH 1/2] Handle async validation --- .../ValidationTests.cs | 10 ++++++---- .../ValidationBehavior.cs | 9 +++++---- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/MediatR.Extensions.FluentValidation.AspNetCore.Tests/ValidationTests.cs b/src/MediatR.Extensions.FluentValidation.AspNetCore.Tests/ValidationTests.cs index 0079a27..e82c708 100644 --- a/src/MediatR.Extensions.FluentValidation.AspNetCore.Tests/ValidationTests.cs +++ b/src/MediatR.Extensions.FluentValidation.AspNetCore.Tests/ValidationTests.cs @@ -48,14 +48,16 @@ public class CommandValidation : AbstractValidator { public CommandValidation() { - RuleFor(x => x.Discount).GreaterThanOrEqualTo(0); + RuleFor(x => x.Discount) + .GreaterThanOrEqualTo(0) + .MustAsync(async (_, __) => await Task.Delay(0).ContinueWith(x => true)); } } public class Command : IRequest - { + { public decimal Discount { get; set; } - + } public class CommandHandler : IRequestHandler @@ -65,4 +67,4 @@ public async Task Handle(Command request, CancellationToken cancellationTo return await Unit.Task; } } -} +} \ No newline at end of file diff --git a/src/MediatR.Extensions.FluentValidation.AspNetCore/ValidationBehavior.cs b/src/MediatR.Extensions.FluentValidation.AspNetCore/ValidationBehavior.cs index 9575ed1..6eeb1ce 100644 --- a/src/MediatR.Extensions.FluentValidation.AspNetCore/ValidationBehavior.cs +++ b/src/MediatR.Extensions.FluentValidation.AspNetCore/ValidationBehavior.cs @@ -16,13 +16,14 @@ public ValidationBehavior(IEnumerable> validators) _validators = validators; } - public Task Handle(TRequest request + public async Task Handle(TRequest request , CancellationToken cancellationToken , RequestHandlerDelegate next ) { - var failures = _validators - .Select(v => v.Validate(request)) + var failures = + (await Task.WhenAll(_validators.Select(async v => await v.ValidateAsync(request, cancellationToken)))) + .Where(result => result != null) .SelectMany(result => result.Errors) .Where(f => f != null) .ToList(); @@ -32,7 +33,7 @@ public Task Handle(TRequest request throw new ValidationException(failures); } - return next(); + return await next(); } } } \ No newline at end of file From 783f48acfd56ab0604e58e2052c7a720aa38d658 Mon Sep 17 00:00:00 2001 From: Julien Nigay Date: Fri, 13 May 2022 17:29:10 +0200 Subject: [PATCH 2/2] clean diff --- .../ValidationTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/MediatR.Extensions.FluentValidation.AspNetCore.Tests/ValidationTests.cs b/src/MediatR.Extensions.FluentValidation.AspNetCore.Tests/ValidationTests.cs index e82c708..2a7e194 100644 --- a/src/MediatR.Extensions.FluentValidation.AspNetCore.Tests/ValidationTests.cs +++ b/src/MediatR.Extensions.FluentValidation.AspNetCore.Tests/ValidationTests.cs @@ -55,9 +55,9 @@ public CommandValidation() } public class Command : IRequest - { + { public decimal Discount { get; set; } - + } public class CommandHandler : IRequestHandler