5

ベースコントローラーをいくつかのアクションフィルターで装飾しました。彼らは正常に動作します。

これらのフィルターの 1 つがリクエストを設定します - ドメインに基づいてカルチャを設定するなどのことを行います。

また、Authorize 属性を使用した承認が必要なアクションもいくつかあります。

私の問題は、ユーザーがアクセスを許可されていないページを要求しようとすると、承認フィルターが作動してページにアクセスできないことを伝えるページにリダイレクトされることです。

問題は、アクション フィルターが実行されないため、カルチャやその他の要求データが設定されないことです。これにより、ビュー内の言語が正しく表示されなくなり、他のデータが失われます。

承認フィルターが最初に実行されることは知っていますが、私の質問は次のとおりです。承認に関係なく、ビューが返される前に特定のメソッドが常に実行されるように設計するにはどうすればよいですか。

それが理にかなっていることを願っています。

4

2 に答える 2

6

このドキュメント(Filter Orderヘッダーの下)によると、承認フィルターは常にアクションフィルターの前に実行されます。これは、Orderプロパティをいじっても役に立たないことを意味します。

これを処理する最善の方法は、独自の承認属性を記述し(サブクラス化AuthorizeAttributeしてオーバーライドすることによりAuthorizeCore)、承認が失敗したときにアクションフィルターを手動で実行することだと思います。

于 2011-06-05T13:15:04.807 に答える
1

アクション フィルターに関するMSDN 記事のアクション フィルターの実行順序を参照してください。

基本的に、次のOrderように、これらのカルチャ フィルターにプロパティを指定して、Authorization フィルターの前に実行することができます。

[CultureRedirect(Order = 1)]
public class MyBaseController : Controller { }

[Authorize(Order = 2)]
public class RequiresAuth : MyBaseController { }

...

それが失敗した場合でも、アクションが実行される前、および ActionFilter が実行される前にコードを実行できます。

于 2010-03-17T03:32:14.417 に答える