我正在尝试制作自己的自定义System.Web.Http.AuthorizeAttribute
。一切正常,直到我需要在被覆盖的async
函数中运行一些OnAuthorization
函数。
我找到了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
方法,那么我显然无法返回任务:
由于OnAuthorizeAsync是一个返回'Task'的
async
方法,因此返回关键字后面不能跟一个对象表达式。
有没有办法可以看出这个烂摊子?
答案 0 :(得分:0)
基于@sellotape的回答:
public async 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);
}
}
await base.HandleUnauthorizedRequest(actionContext);
}