ValidationBehaviour.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using FluentValidation;
  2. using Microsoft.AspNetCore.Http;
  3. using Microsoft.Extensions.Logging;
  4. namespace AipGateway.API.Application.Pipeline.Middlewares.Behaviours
  5. {
  6. public class ValidationBehaviour
  7. {
  8. private readonly ILogger<ValidationBehaviour> _log;
  9. private readonly IEnumerable<IValidator<HttpRequest>> _validators;
  10. private readonly RequestDelegate _next;
  11. public ValidationBehaviour(ILogger<ValidationBehaviour> logger, IEnumerable<IValidator<HttpRequest>> validators, RequestDelegate next)
  12. {
  13. _log = logger;
  14. _validators = validators;
  15. _next = next;
  16. _log.LogError("ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo: ValidationBehaviour");
  17. }
  18. public async Task InvokeAsync(HttpContext context)
  19. {
  20. try
  21. {
  22. //_log.LogError("ValidationBehaviour Invoke Before:");
  23. if (_validators.Any())
  24. {
  25. var validationContext = new ValidationContext<HttpRequest>(context.Request);
  26. var validationResults = await Task.WhenAll(
  27. _validators.Select(v =>
  28. v.ValidateAsync(validationContext)));
  29. var validationFailures = validationResults
  30. .Where(r => r.Errors.Any())
  31. .SelectMany(r => r.Errors)
  32. .ToList();
  33. if (validationFailures.Any())
  34. throw new ValidationException(validationFailures);
  35. }
  36. await _next.Invoke(context);
  37. //_log.LogError("ValidationBehaviour Invoke After:");
  38. _log.LogError("ValidationBehaviour.........................................................................");
  39. }
  40. catch (Exception)
  41. {
  42. throw;
  43. }
  44. }
  45. }
  46. }