2014-12-24 46 views
0

我正在研究一個項目,它能夠計算調用方法的次數(或返回ActionResult)將會非常有幫助。但是,一個簡單的計數器不能使用以下代碼:在asp.net mvc中使用c#控制器中的計數方法調用mvc 4

namespace Website.Controllers 
{ 
    public class HomeController : BaseController 
    { 

     int counter = 0; 

     public ActionResult DoSomething() 
     { 
      counter++; 

      // Do more 

      return View(); 
     } 
    } 
} 

有沒有一種方法來計算此?我找不到任何關於這個主題的使用谷歌或在這裏搜索,所以我假設我措辭的方式,或者我嘗試實施這種方式是不正確的,也許有人可以詳細說明上面的代碼,並解釋我在做什麼錯誤。

+2

您是否真的只想要一個計數器,或者這是一個XY問題,您試圖重新創建應用程序監視? – CodeCaster

+1

你爲什麼要數它?你想解決什麼問題? –

+0

我試圖把它計算在內,因爲這是我能想到的最簡單的方法,可以比較某個變量被調用的次數,然後我可以使用該變量在我的網站上顯示/不顯示按鈕。 –

回答

3

你正在實施的計數器在記憶中工作。如果應用程序重新啓動,計數器將被重置。

counter變量必須是靜態的,所以它會工作,直到您的應用程序池未重新啓動。它也必須是線程保存。

在遞增計數器之前,您必須鎖定一個共享對象(它也可能是一個靜態變量)。

namespace Website.Controllers 
{ 
    public class HomeController : BaseController 
    { 

     static int counter = 0; 
     static object lockObj = new object(); 
     public ActionResult DoSomething() 
     { 
      lock(lockObj) 
      { 
       counter++; 
      } 
      // Do more 

      return View(); 
     } 
    } 
} 

編輯 如果你想爲每個用戶計數器,你可以使用Session狀態。

if(Session["counterKey"] != null) 
{ 
    int counter = (int)Session["counterKey"]; 
    counter++; 
    Session["counterKey"] = counter; 
} 
else 
{ 
    Session["counterKey"] = 1; // first call 
} 
+0

我會嘗試實現'Session'狀態,希望這會起作用。 –

+0

在mvc每次向控制器發出http請求時,mvc框架都會創建一個控制器的新實例。因此,在您的代碼中,每次調用會創建一個新的計數器變量並將其值設置爲0!靜態方法是一個可以工作的解決方案.FYI你也可以使用文件或數據庫表。 –

相關問題