Je travaille actuellement sur le comportement du pipeline dans Mediatr 3 pour la validation de la demande. Tous les exemples que j'ai rencontrés lançaient ValidationException si des échecs se produisaient, au lieu de le faire, je veux retourner la réponse avec l'erreur. Quelqu'un a une idée sur la façon de le faire?Réponse de retour avec erreurs au lieu de lancer une exception dans le pipeline de validation mediatr 3
est sous le code pour le pipeline de validation:
public class ValidationPipeline<TRequest, TResponse> :
IPipelineBehavior<TRequest, TResponse> where TRequest : IRequest<TResponse>
{
private readonly IEnumerable<IValidator<TRequest>> _validators;
public ValidationPipeline(IEnumerable<IValidator<TRequest>> validators)
{
_validators = validators;
}
public Task<TResponse> Handle(TRequest request, RequestHandlerDelegate<TResponse> next)
{
var failures = _validators
.Select(v => v.Validate(request))
.SelectMany(result => result.Errors)
.Where(f => f != null)
.ToList();
if (failures.Any())
{
throw new ValidationException(failures);
}
return next();
}
}
Note: Je trouve cette question Handling errors/exceptions in a mediator pipeline using CQRS? et je suis intéressé par la 1ère option sur la réponse, mais aucun exemple clair sur la façon de le faire.
C'est ma classe de réponse:
public class ResponseBase : ValidationResult
{
public ResponseBase() : base() { }
public ResponseBase(IEnumerable<ValidationFailure> failures) : base(failures) {
}
}
et j'ajouté sous la signature dans la classe de pipeline de validation:
public class ValidationPipeline<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse> where TRequest : IRequest<TResponse>
where TResponse : ResponseBase
Je l'ai fait alors dans la méthode de la poignée:
var response = new ResponseBase(failures);
return Task.FromResult<TResponse>(response);
Mais cela m'a donné l'erreur «ne peut pas convertir en TResponse».
'renvoie la réponse à la error' - A quoi ressemble la "réponse"? – Alex
Le pipeline 'TResponse' sera le même que le gestionnaire sous-jacent' TResponse' - le 'ResponseBase: ValidationResult' ressemble à une odeur de code pour moi. Je ne suis pas clair sur ce que vous essayez d'atteindre. – Alex
J'essaie d'hériter de la classe ValidationResult de FluentValidation – anggiputper