Как вернуть ActionResult вместе с asyn c foreach и IAsyncEnumerable - PullRequest
2 голосов
/ 09 марта 2020

У меня есть метод контроллера этой подписи:

public async IAsyncEnumerable<MyDto> Get()

Он работает нормально, но мне нужно выполнить некоторую проверку запроса и вернуть соответственно 401, 400 и другие коды, которые он не поддерживает. Кроме того, следующая подпись не компилируется:

public async Task<ActionResult<IAsyncEnumerable<MyDto>>> Get()

Ошибка:

Невозможно неявно преобразовать тип 'Microsoft.AspNetCore. Mvc .UnauthorizedResult' в 'MyApi.Responses. MyDto '

Полный метод:

        public async IAsyncEnumerable<MyDto> Get()
        {
            if (IsRequestInvalid())
            {
                // Can't do the following. Does not compile.
                yield return Unauthorized();
            }
            var retrievedDtos = _someService.GetAllDtosAsync(_userId);

            await foreach (var currentDto in retrievedDtos)
            {
                yield return currentDto;
            }
        }

Есть идеи? Не могу поверить, что Microsoft разработала IAsyncEnumerable для использования без возможности / гибкости возврата чего-либо еще.

...