asp.net - ページ - mvc5 @model




ASP.NET MVC:コントローラ変数を設定するためのアクションフィルタ (2)

このような基本コントローラを作成します

   public class MyContollerController : Controller
    {
        public DataEntity userData;
        protected override void Initialize(System.Web.Routing.RequestContext requestContext)
        {            
            base.Initialize(requestContext);
            var customId = requestContext.HttpContext.Session["key"];
            if(customId!=null)
            {
                 userData=getDataGromDataBase(customId);
            }   
            else
            {
               //redirect User
            }     
        }
    }

今このようなurコントローラを作成する

public class MyDemoController : MyContollerController
{
        public ActionResult Action1()
        { 
             //access your data
             this.userData

        }
        public ActionResult Action2()
        { 
             //access your data
             this.userData

        }
}

私はすべてのページリクエストで私は特定のIDの存在のセッションをチェックしなければならないというシナリオがあります。 これが見つかった場合は、データベースから関連オブジェクトを取得し、それをコントローラで利用できるようにする必要があります。 セッションIDが見つからない場合、ユーザーをリダイレクトする必要があります(セッションの有効期限が切れています)。

現時点で、私は私のコントローラ内のすべてのアクションメソッドの開始時にこれを行うカスタムコードの組(数行)を持っています - これは不必要な繰り返しのようです。

このシナリオはアクションフィルタの価値がありますか?

ありがとう

更新ここにいくつかの素晴らしい情報はみんな。 ありがとうございました


はい、これはアクションフィルターの良い適用のように思えます、あなたはそれをコントローラーレベルで適用してすべてのアクションに作用することができるので。 手動ですべてのコントローラに追加したくない場合は、それをコントローラの基本クラスの一部にするか、このアクションフィルタを各コントローラに自動的に適用する独自のコントローラファクトリを作成することもできます。

アクションフィルターからアクションにデータを渡す方法については、 ASP.NET MVCカスタムアクションフィルターからアクションへのオブジェクトの受け渡しを参照してください。





action-filter