using ValidationException = NetinaCMS.Common.Models.Exception.ValidationException; namespace NetinaCMS.Repository.Behaviors; public class ValidationBehavior : IPipelineBehavior where TRequest : notnull { private readonly IEnumerable> _validators; public ValidationBehavior(IEnumerable> validators) { _validators = validators; } public async Task Handle(TRequest request, RequestHandlerDelegate next, CancellationToken cancellationToken) { var context = new ValidationContext(request); List errors = new List(); foreach (IValidator validator in _validators) { var result = await validator.ValidateAsync(context, cancellationToken); if (!result.IsValid) errors.AddRange(result.Errors.Select(v => new ValidationError(v.PropertyName, v.ErrorMessage)).Distinct()); } if (errors.Any()) { throw new ValidationException(errors); } var response = await next(); return response; } }