I'm working on a .NET 5 web api and I have the following code that throws an error when I try to return NotFound().
[ApiController]
public class Download : ControllerBase
{
// Constructor and members omitted...
[HttpGet( Routes.KatApps.Download )]
[SwaggerOperation(
Summary = "Find and download KatApp kaml file based on precedence of folders passed in",
Description = "Find and download KatApp kaml file based on precedence of folders passed in",
OperationId = "KatApps." + nameof( Routes.KatApps.Download ),
Tags = new[] { "KatApps" } )]
[ProducesResponseType( StatusCodes.Status200OK )]
[ProducesResponseType( StatusCodes.Status304NotModified )]
[ProducesResponseType( typeof( ValidationProblemDetails ), StatusCodes.Status401Unauthorized )]
[ProducesResponseType( typeof( ValidationProblemDetails ), StatusCodes.Status404NotFound )]
public async Task<ActionResult<FileStreamResult>> HandleAsync( [FromQuery] Parameters parameters )
{
using ( var cn = await dbConnectionFactory.CreateDataLockerConnectionAsync() )
{
foreach ( var folder in parameters.Folder )
{
var keyInfo = await cn.QueryBuilder( $@"Query Omitted" ).QueryFirstOrDefaultAsync<CacheDownloadInfo>();
if ( keyInfo != null )
{
return await CachedOrModifiedAsync( keyInfo, dbConnectionFactory );
}
}
return NotFound();
}
}
}
protected async Task<FileStreamResult> CachedOrModifiedAsync( CacheDownloadInfo cacheDownloadInfo, IDbConnectionFactory dbConnectionFactory )
{
// Code to return FileStreamResult
}
But when I hit the NotFound call, I get:
System.ArgumentException: Invalid type parameter 'Microsoft.AspNetCore.Mvc.FileStreamResult' specified for 'ActionResult<T>'.
The weird thing is, I have another controller action (skipping all the setup code to just show signature and start) that works fine when I return NotFound().
public async Task<ActionResult<ManagedFileInfo>> HandleAsync( [FromQuery] Parameters parameters )
{
using ( var cn = await dbConnectionFactory.CreateDataLockerConnectionAsync() )
{
var liveFiles = ( await QueryFileVersions( cn, new[] { parameters.Name }, parameters.Folder ) ).ToArray();
if ( liveFiles.Length == 0 )
{
return NotFound();
}
Anyone have any idea why my first method does not work?
