我在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,现在一切正常!