【问题标题】:Why is OnAuthorization called twice in my custom AuthorizationFilterAttribute?为什么在我的自定义 AuthorizationFilterAttribute 中调用了两次 OnAuthorization?
【发布时间】:2013-12-30 23:32:19
【问题描述】:

为什么OnAuthorization 被叫了两次,因为我的直截了当AuthorizationFilterAttribute

public class ApiAuthenticateAttribute : AuthorizationFilterAttribute
{
   public void override OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        if(NotAuthorized())
            throw new Exception();

    }
}

第一个调用堆栈

第二次调用栈

【问题讨论】:

  • 可能是因为你的请求是跨域的
  • 你能检查调用堆栈吗?
  • 可能是因为你没有覆盖基本方法?
  • 错字。已添加override
  • @AnirudhaGupta by partial 你的意思是部分观点吗?这是一个 API 项目,而不是 MVC 项目。不会发生 HTML 渲染。

标签: c# asp.net-web-api authorization


【解决方案1】:

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

【讨论】:

  • 我安装了 3.2.4 但有同样的问题,所以我需要这样覆盖 AllowMultiple 属性: public override bool AllowMultiple { get { return false; } }
  • 公共覆盖 bool AllowMultiple { get { return false; } } 为我工作,因为我没有在我的项目中使用 ninject
【解决方案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) 方法被调用两次。

解决方案是全局设置一个(作为配置过滤器)或单独为方法添加属性。

【讨论】:

    猜你喜欢
    • 2014-02-06
    • 1970-01-01
    • 2020-01-20
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 2012-08-02
    • 2011-09-04
    • 1970-01-01
    相关资源
    最近更新 更多