1

目標

データ注釈のパラメーターの値を取得します。

問題

構文がわかりません。

シナリオ

私のアプリケーションには次のコントローラーがあります。

[PermissionsFilter(Roles = "Administrator")]
public ActionResult Index()
{
    return View();
}

そして、私のアプリケーションには次の方法があります。

protected override bool AuthorizeCore(HttpContextBase httpContext)
{
    return true;
}

私が必要とするのは単純なようです:メソッドで文字列を取得するにはどうすればよいですか? AdministratorAuthorizeCorehttpContextパラメータ経由ですか?

ナレッジ スポットライト

を実装するクラスのAuthorizeCore中にあります。つまり、属性のメソッドをオーバーライドして、新しい属性 (PermissionFilters 属性) を作成しています。PermissionFiltersAuthorizeAttributeAuthorizeCoreAuthorize

4

1 に答える 1

3

コントローラー アクションに適用される属性を取得するには、リフレクションを使用する必要があります。以下は、それを行う方法の簡単で汚い例です。

    private string GetPermissionFilerValue()
    {
        object[] attributes = typeof(YourControllerType).GetType().GetMethod("Index").GetCustomAttributes(typeof (PermissionFilterAttribute));

        return attributes[0].Roles;
    }

基本的に、コントローラーの型への参照を取得し、そこからコントローラーのメソッドへの参照を取得する必要があります。これを MethodInfo オブジェクトの形式で取得したら、GetCustomAttributes を使用して、メソッドに適用されたすべてのカスタム属性または特定のタイプのすべてのカスタム属性を取得できます。属性インスタンスを取得したら、Roles プロパティを調べることができます。

前述したように、上記の例は、特定のメソッドの属性インスタンスを取得する方法の非常に簡単で汚いデモです。特定のシナリオに合わせて調整する必要がある可能性があります。

于 2013-08-21T18:37:17.463 に答える