2016-12-03 119 views
0

我试图使我自己的自定义System.Web.Http.AuthorizeAttribute。一切正常,直到我需要在覆盖的OnAuthorization函数中运行一些async函数。自定义AuthorizeAttribute OnAuthorizationAsync函数

我发现OnAuthorizationAsync方法我用运行async方法,但是仍然有问题。我需要确保连接到HttpActionContext的标头位于db中。

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)async方法,它返回一个布尔值。如果我尝试await它,使OnAuthorizationAsyncasync方法我那么显然不能返回一个任务:

由于OnAuthorizeAsync是一个async方法,返回“任务”,返回的关键字一定不能跟一个对象表达式。

有没有办法让你看到这混乱?

回答

1

由于您使用的是await,因此需要将async修饰符添加到方法的声明中。然后将您在那里的return更改为await。编译器将完成剩下的工作 - 即为您返回Task