为什么我的自定义AuthorizationFilterAttribute中的OnAuthorization方法会被调用两次?

5
为什么我的简单的AuthorizationFilterAttribute中的OnAuthorization会被调用两次?
public class ApiAuthenticateAttribute : AuthorizationFilterAttribute
{
   public void override OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        if(NotAuthorized())
            throw new Exception();

    }
}

第一个调用栈

第一个调用栈

第二个调用栈

第二个调用栈


1
可能是因为您的请求跨域了。 - Soheil Ghahremani
你能检查一下调用栈吗? - Silvermind
也许是因为您没有覆盖基本方法? - VsMaX
笔误。添加了 override - Omar
1
@AnirudhaGupta 你所说的“partial”是指局部视图吗?这是一个API项目,而不是MVC项目。没有HTML渲染发生。 - Omar
显示剩余4条评论
2个回答

2

问题出在Ninject.Web.WebApi上。由于某种原因它注册了两次过滤器。将该软件包更新到最新版本(v 3.2.1)即可解决问题。


3
我已经安装了3.2.4版本,但问题仍然存在,所以我需要通过以下方式覆盖AllowMultiple属性:public override bool AllowMultiple { get { return false; } }。 - andrey.shedko
公共覆盖布尔类型AllowMultiple属性 { get { return false; } } 对我有用,因为我在我的项目中没有使用ninject。 - Jitendra Pancholi

2

我已经在WebAPIconfig.cs中注册了AuthorizeAttribute:

public static void Register(HttpConfiguration config)
{
   config.Filters.Add(new Global.Security.MyAuthorizeAttribute());

此外,我还使用了 Attribute 对该方法进行了装饰。
[MyAuthorize]
public IHttpActionResult Get(string name)

这导致 public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext) 方法被调用了两次。
解决方案是要么全局设置(作为配置过滤器),要么为每个方法单独添加属性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接