2017-03-29 50 views
0

我在Web API 2中創建了一個簡單的自定義身份驗證過濾器,如下所示。Web API 2中的身份驗證過濾器

public Task AuthenticateAsync(HttpAuthenticationContext context, CancellationToken cancellationToken) 
    { 
     string authToken = context.Request.Headers.GetValues("CustomAuthHeader").FirstOrDefault(); 
     if (string.IsNullOrEmpty(authToken)) 
     { 
      context.ErrorResult = new UnauthorizedResult(new AuthenticationHeaderValue[0], context.Request); 
     } 

     return Task.FromResult(0); 
    } 

    public Task ChallengeAsync(HttpAuthenticationChallengeContext context, CancellationToken cancellationToken) 
    { 
     return Task.FromResult(0); 
    } 

我有以下問題,關於這個 -

1)。 AuthenticateAsync用於實現核心認證邏輯,但ChallengeAsync在現實生活中的用途是什麼。如果可能的話請用一個例子來解釋。 2)。爲什麼它返回任務。它會每次在後端創建一個新線程(無論何時適用)。如果它每次都創建一個新線程,當這個線程將被殺死? 3)。 Task.FromResult(0)的作用是什麼?

謝謝!

回答

1
  1. ChallengeAsync用於在需要時向響應添加驗證質詢。通常在401未授權的情況下使用它來提供有關服務器所需的身份驗證的信息。

  2. 方法返回任務以支持異步執行和鏈接。

  3. 方法不包含真正的異步方法,這就是爲什麼他們返回虛擬已完成的任務以滿足實現的接口。

我猜this article應該會幫助你很多。