Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Web API自定义筛选器/属性未触发_C#_Asp.net_Asp.net Web Api - Fatal编程技术网

C# Web API自定义筛选器/属性未触发

C# Web API自定义筛选器/属性未触发,c#,asp.net,asp.net-web-api,C#,Asp.net,Asp.net Web Api,我有以下过滤器: public class CPUAPIAuthorize : AuthorizationFilterAttribute { public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext) { if (CPUContext.Current == null) { actionCon

我有以下过滤器:

public class CPUAPIAuthorize : AuthorizationFilterAttribute
{
    public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        if (CPUContext.Current == null)
        {
            actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Forbidden);
            return;
        }

        base.OnAuthorization(actionContext);
    }
}
应用于以下web api方法:

[HttpGet]
[CPUAPIAuthorize]
[ExceptionHandling]
public dynamic GetPrograms()
{
   .... removed ....
}
但是,如果我在If CPUContext.Current==null中放置断点,它就不会被捕获,这让我相信该属性没有触发

我还注意到我的自定义ExceptionHandling属性没有触发,我可以删除所有属性,web api方法将正常工作。而在过去,我被要求在那里有HttpGet属性,否则该方法将无法执行

我不知道为什么过滤器/属性没有启动

什么是CPUContext.Current

为了帮助澄清,CPUContext.Current保存当前登录的用户。。这里是方法。我在使用上述属性的其他项目上使用相同的设置

public static class CPUContext
{
    public static CommunityPartnerUser Current
    {
        get
        {
            if (!HttpContext.Current.Items.Contains("_currentCPU"))
            {
                HttpContext.Current.Items.Add("_currentCPU", Authentication.AuthenticateCPUser());
            }

            return HttpContext.Current.Items["_currentCPU"] as CommunityPartnerUser;
        }
    }
}

我想你需要命名你的attibute CPUAPIAuthorizeAttribute来让它工作。由于一些命名准则
只需使用GetPrograms上的属性即可更好地诊断问题: 当您在GetPrograms的第一行上放置断点时,是否命中它

如果否,则说明调试符号未正确加载,或者您的请求已由另一个控制器处理。通过在GetPrograms的开头抛出一个新异常,您可以很容易地确定是哪种情况


如果您点击了断点,那么下一件事就是确定为什么不点击自定义属性中的断点。您说过要将其放在if语句中,请将断点放在属性的第一行,排除您不点击它的原因是因为CPUContext.Current实际上不为null。

最终解决问题的是在Microsoft ASP.Net Web API包上运行nuget更新,并且-执行此操作后,OnAuthorization方法开始启动。

告诉我ActionFilterAttribute标准的完整命名空间路径由您自己的基classSystem.Web.Http.Filters派生的类-我已经检查过了:您知道,这是第一步检查;您可以共享AuthorizationFilterAttribute的代码吗?至少,某种伪代码?AuthorizationFilterAttribute实际上是.Net framework的一部分,确切地说是System.Web.Http.Filters.AuthorizationFilterAttribute。因此,很遗憾我不能:我已经将属性添加到属性类名中,但仍然不走运。尝试从中派生,而不是ActionFilterAttribute如果这不起作用,那么我就没有主意了:/