我在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。
我看不出有什么遗漏。有人在想吗?
答案 0 :(得分:2)
最后,我弄清楚发生了什么:mvc项目和外部程序集引用了System.Web.Mvc的不同次要版本(4.0.3和4.0.4,谢谢Reflector!)
包含我的ClaimsAuthorizeAttribute类的外部库项目在其对System.Web.Mvc的引用上将Specific version属性设置为true。我把它设置为假,现在一切正常!