、属性を宣言するとき(その値はコンパイル時に知られなければならないので)あなたは任意のメソッドを呼び出すことはできませんが、あなたはすべてを実行するためにAuthorizeAttribute
由来独自のカスタム属性を導き出すことができますあなたが必要とする論理。私たち全員がローカライゼーションに何をしたのではないのですか?NameAttribute
&お友達の前にロングウェイトのローカリゼーション対応のデータアノテーションがありますか?コンセプトの
証明:その後、
class DynamicAuthorizeAttribute : AuthorizeAttribute {
protected bool AuthorizeCore(HttpContextBase context) {
// Perform your logic here, eventually update Roles property
}
}
とは:
[DynamicAuthorize]
public ActionResult Get() {
// ...
}
これは、そこに独自のロジックを置くか、単にRoles
プロパティを更新し、通常に委任することができ、ちょうど可能な方法でありますロジックは単にbase.AuthorizeCore(context)
を呼び出します。ここのすべてのコードはスレッドセーフでなければならないことに注意してください。
あなたは、静的メソッドで作業していると、あなたのコントローラ内でそのロジックを維持したいならば、あなたは(たとえば)受け入れるように遊ぶことができますが、このような何か:あなたはコントローラにアクセスすることができます
[DynamicAuthorize(typeof(MyView), nameof(GetRole))]
注意ビュー名はcontext.HttpContext.Request.RequestContext.RouteData
です。
このような静的メソッドを呼び出します。ロジックが本当に複雑で大きく変化する場合は、このロジックを集中化し、他のMVC ツールを使用して、これを行うことができます。
できません。コンパイル時に解決できるパラメータ値のみが受け入れられます。 –
属性はコードとして格納されず、メタデータとして格納されます。そのため、内部には限られた範囲の構造のみを使用できます。 –