簡體   English   中英

在 ASP.NET Core Web API 中創建自己的任務返回方法

[英]Creating own Task returning methods in ASP.NET Core Web API

我正在使用文章的說明創建一個簡單的身份驗證處理程序,以與 ASP.NET Core Web API 一起使用。 以下代碼是這項工作的一部分。

public class CustomAuthenticationHandler : AuthenticationHandler<BasicAuthenticationOptions>
{
    //Constructors and fields

    protected override async Task<AuthenticateResult> HandleAuthenticateAsync()
    {
        //Validation of bearer token 
        //No awaitable method calls
    }
}

盡管此HandleAuthenticateAsync()方法被標記為async ,但它實際上根本不等待方法主體內的任何內容。 所以,我的問題是,

  1. 我真的需要為此使用異步裝飾的方法嗎? 如果我省略了 async 關鍵字,它會影響應用程序嗎?
  2. 我可以在不違反docs中描述的最佳實踐的情況下,重新安排以下列方式返回Task<AuthenticateResult>的方法嗎?
protected override Task<AuthenticateResult> HandleAuthenticateAsync()
    {
        return new Task<AuthenticateResult>(() =>
        {
            //Token validation
        });
    }

我真的需要為此使用異步裝飾的方法嗎? 如果我省略了 async 關鍵字,它會影響應用程序嗎?

我建議您保留async關鍵字,並使用#來消除編譯器警告。 使用任務返回方法,任何異常都應該被捕獲並放在返回的任務上, async會為你做這些,所以你不必自己編寫代碼。

我可以重新安排這個返回任務的方法嗎?

不,您永遠不應該使用Task構造函數。

如果您不想使用async ,則使用Task.FromException返回結果並使用Task.FromResult返回異常。

您根本不需要用async修飾該方法。 只有當你在那里有什么需要等待的時候。

你的第二點——你完全可以這樣做,但它會妨礙可讀性。

您可以按照教程進行操作,其中說明如下:如果出現問題並且無法完成身份驗證,請返回以下內容:

return Task.FromResult(AuthenticateResult.Fail("Cannot Auth"));

如果一切都好,就返回

return Task.FromResult(AuthenticateResult.Success(ticket));

票據是主體身份驗證的AuthenticationTicket

此處提供更多信息: ASP.NET Core 中的身份驗證方案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM