我正在尝试创建自己的自定义System.Web.Http.AuthorizeAttribute
。在我需要在被覆盖的OnAuthorization
函数中运行一些async
函数之前,一切都正常。
我找到了OnAuthorizationAsync
方法并使用了它,但是在运行async
方法时仍然有问题。我需要确保附加到HttpActionContext
的头文件在数据库中。
public override Task OnAuthorizationAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
{
IEnumerable<string> values;
if (actionContext.Request.Headers.TryGetValues("Authentication", out values))
{
var token = new Token() { TokenString = values.First() };
if (await _tg.ValidateToken(token))
{
return base.OnAuthorizationAsync(actionContext, cancellationToken);
}
}
base.HandleUnauthorizedRequest(actionContext);
}
_tg.ValidateToken(token)
是一个返回bool的async
方法。如果我尝试await
它并使OnAuthorizationAsync
成为async
方法,那么显然我不能返回Task:
由于OnAuthorizeAsync是一个返回'Task'的async
方法,因此return关键字后面不能跟对象表达式。
有没有什么办法能让你看清这一团乱麻?
2条答案
按热度按时间ui7jx7zq1#
因为使用了
await
,所以需要在方法声明中添加async
修饰符。然后将return
修改为await
。编译器会完成剩下的工作-即返回Task
。zf2sa74q2#
根据@sellotape的回答: