Tengo un AuthorizationHandler que depende de un servicio que ofrece métodos asincrónicos para el middleware de autorización de.NET Core 3.1. Tengo que llamar a algunos de estos métodos asíncronos dentro del HandleRequirementAsync
método. El código general se ve así:
{
public class MyAuthorizationHandler: AuthorizationHandler<MyRequirement, Tuple<string, string>>
{
private readonly IAuthIntelRepository authIntelRepository;
public UserAssistanceAuthorizationHandler(IAuthIntelRepository authIntelRepository)
{
this.authIntelRepository = authIntelRepository;
}
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MyRequirement requirement, Tuple<string, string> someRessource)
{
//some async calls to authIntelRepository
if (/*someCondition*/false)
{
context.Succeed(requirement);
}
return Task.CompletedTask;
}
}
public class MyRequirement: IAuthorizationRequirement { }
}
Sin embargo, tan pronto como uso una await
declaración, aparece un error de que la firma no está configurada explícitamente como asíncrona. Agregar async
a la firma del método heredado provoca el siguiente error.a return keyword must not be followed by an object expression. Did you intend to return 'Task<T>'?
Este hilo elabora un problema similar, pero la solución no parece funcionar en.NET Core 3.1.
Usar Result de la siguiente manera funciona, pero AFAIK esto resultará en una llamada de bloqueo:
Task<Object> obj= this.authIntelRepository.getSomeAsync(...);
obj.Result.property //do Something to check the requirement
No estoy seguro de cómo sería la solución correcta aquí.
Solución del problema
Si el tipo de devolución de su async
método es Task
, entonces, además de la await
palabra clave, trata su método como si estuviera void
regresando:
protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, MyRequirement requirement, Tuple<string, string> someRessource)
{
await authIntelRepository....
if (/*someCondition*/false)
{
context.Succeed(requirement);
}
return;
}
No hay comentarios:
Publicar un comentario