特定のメソッドのコントローラーレベルで適用された属性をオーバーライドすることは可能ですか?

StackOverflow https://stackoverflow.com/questions/1213036

質問

コントローラーレベルで承認属性を適用した場合、そのコントローラーのメソッドの1つでこれをオーバーライドできますか?

ありがとう

ジェームズ

役に立ちましたか?

解決

それは、「オーバーライド」の種類によって異なります。あなたが欲しい。クラス上にある属性を削除することはできませんが、属性をメソッドに再度追加して、より制限的なものにすることができます。

コメントに応じて更新する。まず、独自のAuthorizeAttributeを作成することはやや危険です。 AuthorizeAttributeには、キャッシュが保護されたコンテンツを許可されていないユーザーに提供できないようにするために、キャッシュ属性と対話するコードが含まれています。少なくとも、まったく新しいものを作成するのではなく、既存のAuthorizeAttributeをサブタイプする必要があります。ただし、一般的に、既存のAuthorizeAttributeを使用し、新規を作成するか、既存のASP.NETメンバーシッププロバイダーを見つけることにより、承認を特化することをお勧めします。

「オーバーライド」するアクションにフィルターを設定するのは良い設計ではないと思います。コントローラー上のフィルター。ただし、特定の名前のアクションの承認を必要としないように、コントローラーのフィルターの設計を変更できます。たとえば、AuthorizeAttribute.AuthorizeCoreメソッドをオーバーライドして、既存のメソッドがユーザー名とロールをテストするのと同じ方法でアクション名をテストできます。スレッドの安全性に関するこのメソッドのコメントに注意してください。

他のヒント

これがまったく同じ質問かどうかはわかりませんが、役立つかもしれません...

ActionFilterを有効にする方法アクションメソッドは、コントローラ上の同じActionFilterよりも優先されます

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top