3

我在我的 Mvc4 项目中使用自定义 AuthorizeAttribute:

public sealed class ClaimsAuthorizeAttribute : AuthorizeAttribute
{
    public ClaimsAuthorizeAttribute(){}

    protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext)
    {
        // Security stuff here...
        return base.AuthorizeCore(httpContext);
    }
}

然后我用这个属性装饰控制器动作:

[ClaimsAuthorize(Roles = "Developers")]
public ActionResult Authorize()
{
    return View();
}   

如果我将属性类放入我的 MVC 项目中,一切都会按预期工作。

但是,如果我将属性类放入我的 mvc 项目引用的外部程序集中,则不会发生任何事情。两种情况下的命名空间都是相同的。我的外部程序集项目的引用包含 System.Web 和 System.Web.Mvc。

我看不到缺少什么。有人知道吗?

4

1 回答 1

2

最后,我弄清楚了发生了什么:mvc 项目和外部程序集引用了 System.Web.Mvc 的不同次要版本(4.0.3 和 4.0.4,谢谢 Reflector!)

包含我的 ClaimsAuthorizeAttribute 类的外部库项目在其对 System.Web.Mvc 的引用上将特定版本属性设置为 true。我只是将其设置为 false,现在一切正常!

于 2013-10-11T09:40:54.557 回答