/
urmat
/
taskboardproject1
Обзор
Документация
Войти
/
urmat
/
taskboardproject1
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
UserService
src/UserService.Business/Common/ValidationBehavior.cs
59 строк
2 KB
urmatgit
+ Project Implementing ASP.NET Core CRUD Operation with CQRS and MediatR Patterns
03 апр 2025, 14:31
03 апр 2025, 14:31
393d573
Код
Авторство
О чём код?
using FluentValidation; using MediatR; using Microsoft.IdentityModel.Tokens; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace UserService.Business.Common { //Pipline public class ValidationBehavior<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse> where TRequest : IRequest<TResponse> { private readonly IEnumerable<IValidator<TRequest>> _validators; public ValidationBehavior(IEnumerable<IValidator<TRequest>> validators) { _validators = validators; } public async Task<TResponse> Handle(TRequest request, RequestHandlerDelegate<TResponse> next, CancellationToken cancellationToken) { ArgumentNullException.ThrowIfNull(next); if (_validators.Any()) { var context = new ValidationContext<TRequest>(request); var validationResults = await Task.WhenAll( _validators.Select(v => v.ValidateAsync(context, cancellationToken))).ConfigureAwait(false); var failures = validationResults .Where(r => r.Errors.Count > 0) .SelectMany(r => r.Errors) .ToList(); if (failures.Count > 0) throw new ValidationException(failures); } return await next().ConfigureAwait(false); //var context = new ValidationContext<TRequest>(request); //var failures = _validators // .Select(v => v.Validate(context)) // .SelectMany(result => result.Errors) // .Where(f => f != null) // .ToList(); //if (failures.Count != 0) //{ // throw new ValidationException(failures); //} //return next(); } } }