3

.NET MVC アプリケーションですべての HTTP GET アクションに対してカスタム OnActionExecuted コードを作成する最良の方法は何ですか?

ActionFilter を作成しますか、それとも基本コントローラーを作成しますか?これらのアプローチのいずれかで、GET 要求でのみアクション フィルターを起動することは可能ですか?

私の最初の考えは、次のように書かれたベースコントローラーですが、これが最善の方法ですか、それとも何か不足していますか?

protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
    if (Request.HttpMethod == "GET")
    {
        ...
    }
}
4

3 に答える 3

0

これを行う最善の方法は、アクションで宣言されたベース コントローラーまたはカスタム アクション フィルターのいずれも使用しないことが判明しました。コントローラー ファクトリを使用してアクション フィルターをグローバルに登録することをお勧めします。ベース コントローラーから継承する必要も、コントローラー/アクションにアクション フィルターを追加する必要もありません。ActionInvokerアクション フィルターは、 で宣言されたカスタムDefaultControllerFactory派生でコントローラーに割り当てられますglobal.asax

このブログ投稿は、このアプローチの実装に役立ちました。

于 2013-06-27T13:30:17.760 に答える
0

あなたのコードは良いです。私は使うだろう:

if (string.Equals(Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase))

また、「GET」リクエスト専用の ActionFilter をいくつか作成したい場合は、共通の基本 ActionFilter クラスを作成し、そこからすべての具体的なアクション フィルターを派生させることができます。

于 2012-09-13T13:51:26.153 に答える
0

コントローラー自体はフィルターであるため、コントローラーを使用するか、別のクラス/フィルターを使用できます。どちらが自分に合っているかを分析する必要があります。コントローラーにロジックを配置すると、単体テストが失われる可能性があるため、テスト/SOC が重要な問題である場合は、ロジックをカプセル化する別のクラスを使用することをお勧めします。また、アプリケーションに 2 つの異なるベース コントローラがある場合 (まれに)、コードの重複を回避できます。

于 2012-09-13T14:57:06.730 に答える