![](/img/trans.png)
[英]Using async/await and returning Task<HttpResponseMessage> From ASP.NET Web API Methods
[英]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
,但它實際上根本不等待方法主體內的任何內容。 所以,我的問題是,
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.