C# 在AuthorizationHandler中使用'await'
我有一个AuthorizationHandler,它依赖于为.NET Core 3.1的授权中间件提供异步方法的服务。我必须在C# 在AuthorizationHandler中使用'await',c#,.net-core,async-await,asp.net-authorization,C#,.net Core,Async Await,Asp.net Authorization,我有一个AuthorizationHandler,它依赖于为.NET Core 3.1的授权中间件提供异步方法的服务。我必须在HandleRequirementAsync方法中调用其中一些异步方法。总体代码如下所示: { public class MyAuthorizationHandler : AuthorizationHandler<MyRequirement, Tuple<string, string>> { private read
HandleRequirementAsync
方法中调用其中一些异步方法。总体代码如下所示:
{
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 { }
}
我不确定这里的正确解决方案是什么。如果您的
async
方法的返回类型是Task
,那么,除了wait
关键字外,您将您的方法视为void
返回:
protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, MyRequirement requirement, Tuple<string, string> someRessource)
{
await authIntelRepository....
if (/*someCondition*/false)
{
context.Succeed(requirement);
}
return;
}
protectedoverride异步任务HandleRequirementAsync(AuthorizationHandlerContext上下文,MyRequirement需求,元组someResource)
{
等待作者报告。。。。
if(/*someCondition*/false)
{
成功(要求);
}
返回;
}
如果您的异步
方法的返回类型是任务
,那么,除了等待
关键字外,您将方法视为是无效
返回:
protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, MyRequirement requirement, Tuple<string, string> someRessource)
{
await authIntelRepository....
if (/*someCondition*/false)
{
context.Succeed(requirement);
}
return;
}
protectedoverride异步任务HandleRequirementAsync(AuthorizationHandlerContext上下文,MyRequirement需求,元组someResource)
{
等待作者报告。。。。
if(/*someCondition*/false)
{
成功(要求);
}
返回;
}
Addasync
,如错误消息所示。你没有发布你的第二次尝试,因此人们只能猜测你为什么会出现第二次错误。有一点是肯定的,您没有使用异步任务
。这与.NET内核无关,这就是自.NET 4.5以来async/await
和任务的工作方式如果使用async
就没有理由使用return Task.CompletedTask代码>完全正确。让方法退出。您甚至不需要返回
@PanagiotisKanavos谢谢,成功了。如错误消息所示,添加async
。你没有发布你的第二次尝试,因此人们只能猜测你为什么会出现第二次错误。有一点是肯定的,您没有使用异步任务
。这与.NET内核无关,这就是自.NET 4.5以来async/await
和任务的工作方式如果使用async
就没有理由使用return Task.CompletedTask代码>完全正确。让方法退出。您甚至不需要返回代码>@PanagiotisKanavos谢谢,成功了。