C# 调用自定义属性的次数太多

C# 调用自定义属性的次数太多,c#,asp.net,asp.net-web-api,authorization,C#,Asp.net,Asp.net Web Api,Authorization,我目前正在开发一些安全性来保护web服务调用。我决定扩展authorize属性并覆盖isAuthorized函数以及ActionFilterAttribute OnActionExecuted。但是,在调试程序时,我注意到,如果我要在该类中的api函数上添加[Authorize(Roles=“Read”)]类级别和[Authorize(Roles=“Admin”)],则isAuthorized总共会被调用3次。这可能不是什么大问题,但因为在我的isAuthorized中,我正在数据库中创建和验证

我目前正在开发一些安全性来保护web服务调用。我决定扩展authorize属性并覆盖isAuthorized函数以及ActionFilterAttribute OnActionExecuted。但是,在调试程序时,我注意到,如果我要在该类中的api函数上添加[Authorize(Roles=“Read”)]类级别和[Authorize(Roles=“Admin”)],则isAuthorized总共会被调用3次。这可能不是什么大问题,但因为在我的isAuthorized中,我正在数据库中创建和验证令牌。如果我能够消除这个冗余进程,并且在每次服务调用中只调用一次isAuthorized,那将是理想的

  public class CustomuAuthorizeAttribute : AuthorizeAttribute
{

    protected override bool IsAuthorized(HttpActionContext actionContext)
    {
        bool allowedAccess = true;
        ... logic

    }
   }
重写已执行的OnAction。这实际上只会被点击一次,即使未授权的会被点击三次

    public class CustomAuthorizeFilter : ActionFilterAttribute
{

    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
    {
     .. logic
    }
}
编辑
我发现添加[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]在authorizeattribute calss上解决了多次调用的问题

您是否可以覆盖onauthorization方法并在其上设置断点以查看它被命中的次数?您好,很抱歉回复太晚,但我覆盖了onauthorization,结果它也被命中3次。首先点击OnAuthorization,转到IsAuthorization并返回OnAuthorization。您确定没有将此筛选器添加为全局筛选器吗?我的意思是,你只有一个控制器和行动级别。我不相信我做了什么,但你是对的。如果我去掉控制器和操作级别的过滤器,isAuthorization仍然会被点击一次。这不是我想要的