私はこの署名のコントローラーメソッドを持っています:
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;
}
}
何か案は?IAsyncEnumerable
Microsoft が、他のものを返す可能性/柔軟性なしで使用するように設計されているとは信じられないようです。