2016-12-03 141 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