如何重写控制器内 Startup 类中定义的"OnActionExecuting"?



此代码针对每个传入请求运行,以检查它是否包含有效的 JWT 令牌。

services.AddMvc(options => 
       options.Filters.Add(typeof(JwtAttribute)));

在大多数情况下,这就是我想要的,除了第一次(当用户尝试登录时(。由于它在每个请求时运行,因此用户无法登录。

我尝试在登录操作之上添加一个属性,但它仍然不起作用。

[HttpPost]
[AllowAnonymous]
public async Task<JsonResult> Login([FromBody]Credentials formData)
{
}
在这种情况下

,我应该怎么做才能覆盖启动类中的 OnActionExecution,以便用户可以登录。

感谢您的帮助

通过使用自定义过滤器,而不是内置的身份验证和授权系统,您将无法在此处使用[AllowAnonymous],因为它直接链接到身份验证框架。

您可以做的是添加其他元数据,然后将其作为JwtAttribute筛选器的一部分进行检查。例如,创建另一个属性,如下所示:

public class DisableJwtAttribute : Attribute, IFilterMetadata
{ }

现在,您可以使用 [DisableJwt] 将此属性添加到控制器操作中。

JwtAttribute 筛选器中,您现在可以检查该筛选器是否存在以停止处理请求。 例如,如果您的过滤器是授权过滤器,则如下所示:

public async Task OnAuthorizationAsync(AuthorizationFilterContext context)
{
    if (context.Filters.Any(item => item is DisableJwtAttribute))
        return;
    // filter is active
}

话虽如此,更好的解决方案是采用身份验证系统,并让您的 JWT 验证成为正常身份验证过程的一部分。这样,您实际上可以从 Core 中的所有身份验证和授权功能中受益 ASP.NET。

相关内容

  • 没有找到相关文章

最新更新