Take the following code using ASP.NET Core 2.1:
[HttpGet("/unresolved")]
public async Task<ActionResult<IEnumerable<UnresolvedIdentity>>> GetUnresolvedIdentities()
{
var results = await _identities.GetUnresolvedIdentities().ConfigureAwait(false);
return results.ToList();
}
I would have thought since GetUnresolvedIdentities()
returns IEnumerable<UnresolvedIdentity>
that I could just return
return await _identities.GetUnresolvedIdentities().ConfigureAwait(false);
Except I can't, as I get this error:
CS0029 Cannot implicitly convert type
'System.Collections.Generic.IEnumerable<Data.Infrastructure.Models.UnresolvedIdentity>'
to'Microsoft.AspNetCore.Mvc.ActionResult<System.Collections.Generic.IEnumerable<Data.Infrastructure.Models.UnresolvedIdentity>>'
I need the .ToList()
, which is annoying as it's 2 lines rather than 1.
Why can't ActionResult<T>
figure out that GetUnresolvedIdentities()
returns an IEnumerable<>
and just return that?
The signature of GetUnresolvedIdentities
is:
Task<IEnumerable<UnresolvedIdentity>> GetUnresolvedIdentities();
IEnumerable
is different thanIEnumerable<T>
. Either change_identities.GetUnresolvedIdentities
return type or your controller return type. – Selvagereturn await _identities.GetUnresolvedIdentities().ConfigureAwait(false).ToList();
, if the "two lines" is the only thing bothering you? – Littmantask.ToList()
.(await task).ToList()
would work though – Artoisreturn Ok(await _identities.GetUnresolvedIdentities());
. P.S. you shouldn't call.ConfigureAwait(false)
inside the controllers, unless you're 100% certain about the consequences (even though its not that much of an issue these days as it was in legacy ASP.NET). Its advised to always use it in general purpose libraries where its unknown in which context the library will be used – CrankConfigureAwait
anywhere with ASP.NET Core since it does not have a synchronization context. – Bellinger