我在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。

我看不到缺少的东西。有人知道吗?

最佳答案

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

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

10-07 19:45
查看更多