認証されていないASP.NET MVCのリクエストに応じてフィルタとアクションフィルタを実行して、両方の認可
-
20-09-2019 - |
質問
私はアクションフィルタのカップルと私のベースコントローラを飾っています。彼らは正常に動作します。
これらのフィルタの一つは、要求を設定します - 。などのドメインに基づいて設定文化のようなものを行います。
私はまた、承認の属性を使用して承認を必要とするアクションの一握りを持っています。
私の問題は、ユーザーが、彼らがアクセスを許可されていないページを要求しようとしたときに、ページへの認可フィルタでキックとそれらをリダイレクトするには、彼らがページを争うことができないこと、それらを伝えることです。
問題は、アクションフィルタは、文化や他の要求データが設定されることはありませんので、実行したことがないということです。これが効果的に言語が欠落していることを視野に、その他のデータで間違っていることになります。
私は、許可フィルタが最初に実行知っているが、私の質問はこれです:どのように私はビューにかかわらず、認可の、返される前に、
特定のメソッドが常に実行されていることを確認することができ、このように設計することができます理にかなって希望ます。
解決
このドキュメントするによると、 (フィルタ次数ヘッダーの下)、認証フィルタは、常にアクション・フィルターの前に実行します。これはOrder
のプロパティをいじりしても解決しないことを意味します。
私はこれを処理するための最良の方法は、と承認が失敗したときに手動でアクションフィルタを実行している(AuthorizeAttribute
とオーバーライドAuthorizeCore
をサブクラス化することで)独自の認証属性を記述することだと思います。
他のヒント
にアクションフィルタのための実行のの注文を参照してください。行動に関するMSDNの記事がのフィルタ
それが実行されるように、基本的に、あなたはそれらの文化フィルター上Order
プロパティを供給することができます。の前にの認証フィルタ、このような何かます:
[CultureRedirect(Order = 1)]
public class MyBaseController : Controller { }
[Authorize(Order = 2)]
public class RequiresAuth : MyBaseController { }
...
それが失敗した場合、、あなたはまだの コードbforeを実行することができますアクションが実行をする を実行し、任意ののActionFilter前になります。