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