Mediator, Fluent Validation & OneOf, как сделать pipeline?

Рейтинг: 0Ответов: 0Опубликовано: 05.05.2023

.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

Ответы

Ответов пока нет.