如果放入外部程序集中,则无法使用自定义授权属性

本文关键字:自定义 属性 授权 外部 程序 集中 程序集 如果 | 更新日期: 2023-09-27 18:34:48

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