Mediator, Fluent Validation & OneOf, как сделать pipeline?
.net 7 web api, MediatoR 12, FluentValidation & OneOf, не могу сообразить как сделать PipelineBehavior, чтобы из него не надо было кидать исключение, если запрос не прошел проверку в пайплайне, а можно было вернуть OneOf<bla_bla, ApiError>
, где в ApiError
будут лежать ошибки валидации.
Wrappers:
public interface IMyRequest<TResponse> : IRequest<OneOf<ApiError, TResponse>>
{
}
public interface IMyRequestHandler<TRequest, TResponse> : IRequestHandler<TRequest, OneOf<ApiError, TResponse>>
where TRequest : IMyRequest<TResponse>
{
}
Pipeline:
internal sealed class ValidationBehavior<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
where TRequest : IRequest<TResponse>
where TResponse : IOneOf, new()
Но таким образом никак нельзя вернуть OneOf
, упорно пытается сказать, что не может преобразовать OneOf
в TResponse
:
return OneOf<ApiError, TResponse>.FromT0(new ApiError { Text = "Test" });
Как можно победить это всё?
Сделать 1 общий объект, в котором будет лежать и результат, и ошибки (если нет, то null, null не отдавать клиенту в json'e)? Но хотелось бы иметь функционал как у OneOf
, чтобы метчить результаты на IActionResult (изобретать свой велосипед?).
Метод FromT0: GitHub
Источник: Stack Overflow на русском