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如果这不起作用,那么我就没有主意了:/