2009-07-30 92 views
0

我有一個控制器,所有的控制器都繼承自我需要爲每個控制器請求執行一些代碼。我試過如下:在ASP.NET MVC的每個請求上執行代碼

protected override void Execute(System.Web.Routing.RequestContext requestContext) 
{ 
    if (Session["mallDetected"] == null) 
    { 
     Session["mallDetected"] = DateTime.Now.Ticks; 
     IList<Mall> malls = Mall.FindNearestByIp(Request.UserHostAddress); 

     if (malls.Count > 0) 
     { 
      Session["mall"] = malls[0]; 
     } 
    } 

    base.Execute(requestContext); 
} 

但顯然會話狀態不是Execute方法可用,直到調用base.Execute(),它不爲我工作了。有沒有一個地方可以在ASP.NET MVC中爲每個請求執行此會話代碼?

+1

爲什麼不使用'ActionFilter`? – 2009-07-30 20:30:39

+0

你說得對,Mehrdad,這正是我需要的。 – Chris 2009-07-30 20:46:16

回答

5

嘗試在基本控制器中覆蓋OnActionExecuted或將該功能實現爲過濾器。

1

如果您希望在每個請求的ASP.NET應用程序中發生某些事情,您最好將其構建到IHttpModule中,而不是將其構建到控制器中。你如何保證你的繼任者將正確實施你的控制器?

相關問題