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 に答える