我正在尝试创建一个看起来像这样的方法
protected override Task
HandleRequirementAsync(AuthorizationHandlerContext context,
OperationAuthorizationRequirement requirement,
string resource)
{
if (context.User == null || resource == null)
{
return Task.FromResult(0);
}
var members = await TeamsGraph.GetTeamMembers(resource, context.User);
return Task.FromResult(0);
}
这个方法给我一个错误,因为我有等待TeamsGraph,它要求将方法标记为异步。如果我向方法添加async,那么表示Task.FromResults(0)的2行则会出错。我所覆盖的基础方法需要返回该特定类型。
我确定我遗漏了一些简单的东西,但我还没有完成Async Await,所以我正在寻找有关如何设置此方法的指导。
修改
让我们看看我是否可以覆盖下面的所有人的评论。
rmjoia - 如果我在Task前添加async,那么2返回Task.FromResult(0)行是错误的。
Bradley Uffner - 我所做的代码来自ASP.NET Core的授权示例,它是预期返回的内容。有关示例,请参阅https://docs.microsoft.com/en-us/aspnet/core/security/authorization/secure-data。
David - 在await行之后的代码还有更多内容来检查用户是否是TeamMember,我只是为了简单而省略了。
JSteward - 由于您是第一个提出建议的人,您可以提交答案,我会接受。
答案 0 :(得分:0)
您应该返回Task<int>
而不仅仅是Task
protected override async Task<int> HandleRequirementAsync(
AuthorizationHandlerContext context,
OperationAuthorizationRequirement requirement,
string resource)
{
if (context.User == null || resource == null)
{
return 0;
}
var members = await TeamsGraph.GetTeamMembersAsync(resource, context.User);
return 0;
}
答案 1 :(得分:0)
你能做到这一点:
var members = TeamsGraph.GetTeamMembers(resource, context.User);
members.Wait();