Asp.net

ASP.NET MVC:設置控制器變數的操作過濾器?

  • July 14, 2011

我有一個場景,對於每個頁面請求,我都必須檢查是否存在特定 ID 的會話。如果找到了,我必須從數據庫中獲取一個相關的對象,並將其提供給控制器。如果找不到會話 ID,我需要重定向使用者(會話已過期)。

目前,我有一段自定義程式碼(幾行)在我的控制器中的每個操作方法的開頭執行此操作 - 這似乎是不必要的重複。

這種情況是否值得一個動作過濾器?

謝謝

更新這裡有一些很棒的資訊。謝謝

是的,這聽起來像是動作過濾器的一個很好的應用,因為您可以在控制器級別應用它來操作所有動作。如果您不想手動將其添加到所有控制器,也可以將其作為控制器基類的一部分,或者編寫自己的控制器工廠,自動將此操作過濾器應用於每個控制器。

請參閱ASP.NET MVC 將對像從自定義操作篩選器傳遞到操作以將數據從操作篩選器傳遞到操作。

像這樣創建一個基本控制器

  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
           }     
       }
   }

現在像這樣創建你的控制器

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

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

       }
}

引用自:https://stackoverflow.com/questions/6679736