gpt4 book ai didi

c# - 在 AuthorizationHandler 中使用 `await`

转载 作者:行者123 更新时间:2023-12-05 01:32:28 25 4
gpt4 key购买 nike

我有一个 AuthorizationHandler,它依赖于为 .NET Core 3.1 的授权中间件提供异步方法的服务。我已经在 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 { }
}

我会尽快使用 await虽然声明,但我收到一个错误,指出签名未明确设置为异步。添加async继承方法的签名会导致以下错误。 a return keyword must not be followed by an object expression. Did you intend to return 'Task<T>'?

This thread 阐述了一个类似的问题,但该解决方案似乎在 .NET Core 3.1 中不起作用。

以下列方式使用 Result 是可行的,但据我所知,这将导致调用阻塞:

Task<Object> obj= this.authIntelRepository.getSomeAsync(...);
obj.Result.property //do Something to check the requirement

我不确定这里的正确解决方案是什么样的。

最佳答案

如果您的 async 方法的返回类型是 Task,那么,除了 await 关键字之外,您将您的方法视为是 void 返回:

protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, MyRequirement requirement, Tuple<string, string> someRessource)
{
await authIntelRepository....
if (/*someCondition*/false)
{
context.Succeed(requirement);
}
return;
}

关于c# - 在 AuthorizationHandler 中使用 `await`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65474418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com