AllowAnonymous 是否覆盖 AuthorizeAttribute

Ani*_*nge 5 asp.net asp.net-mvc

我试图阻止特定角色(比如 RoleA)中的特定用户访问特定操作。允许匿名用户访问,但不允许 RoleA 中的用户访问该操作。

所以我做了这样的事情:

[AllowAnonymous]
[CustomAuthorize(Roles="RoleB,RoleC")]
public ActionResult MyAction(){
  //irrelevant
}
Run Code Online (Sandbox Code Playgroud)

但是,CustomAuthorize[AllowAnonymous]存在时,动作过滤器永远不会被击中。

那么[AllowAnonymous]覆盖[CustomAuthorize]吗?

Pad*_*ddy 7

回答问题(有点晚,但可能对某人有用):

AllowAnonymous 有以下描述:

表示一个属性,该属性将控制器和操作标记为在授权期间跳过 AuthorizeAttribute。

因此,将它与授权属性一起添加将导致授权代码根本不运行。

这也有这样的效果,如果您将它作为一个属性添加到整个控制器上(即在类级别),那么将单独的 Authorize 属性添加到该控制器上的操作将不起作用。

  • 我发现这是绝对正确的......类级别的AllowAnoymous覆盖方法级别的Authorize (3认同)

Kri*_*s82 0

我不是 100% 确定,但情况可能是这样。如果您考虑控制器级别的 [Authorize] 属性,那么 [AllowAnonymous] 将覆盖它,因此它优先于它。

您能否尝试将它们交换位置,以便 [CustomAuthorize] 位于顶部以查看结果?

问候