自定义AuthorizeAttribute OnAuthorizationAsync Function
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义AuthorizeAttribute OnAuthorizationAsync Function相关的知识,希望对你有一定的参考价值。
我正在尝试制作自己的自定义System.Web.Http.AuthorizeAttribute
。一切都工作,直到我需要在被覆盖的async
function内运行一些OnAuthorization
函数。
我找到了OnAuthorizationAsync
方法,我使用它,但仍然有运行async
方法的问题。我需要确保附加到HttpActionContext
的标头位于数据库中。
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)
是一种返回bool的async
方法。如果我尝试await
它并使OnAuthorizationAsync
成为async
方法,那么我显然无法返回任务:
由于OnAuthorizeAsync是一个返回'Task'的
async
方法,因此return关键字后面不能跟一个对象表达式。
有没有办法可以看出这个烂摊子?
根据@ sellotape的回答:
public async 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);
}
}
await base.HandleUnauthorizedRequest(actionContext);
}
因为你使用await
,你需要将async
修饰符添加到方法的声明中。然后将你在那里的return
改为await
。编译器将完成剩下的工作 - 即为您返回Task
。
以上是关于自定义AuthorizeAttribute OnAuthorizationAsync Function的主要内容,如果未能解决你的问题,请参考以下文章
自定义AuthorizeAttribute OnAuthorizationAsync Function
ASP.NET Core 中如何通过 AuthorizeAttribute 做自定义验证?
IdentityServer4 - AuthorizeAttribute 不验证 JWT 令牌/自定义用户存储