我正在开发一个项目,能够计算调用方法的次数(或返回ActionResult
)非常有帮助。但是,使用以下代码时,简单的计数器不起作用:
namespace Website.Controllers
{
public class HomeController : BaseController
{
int counter = 0;
public ActionResult DoSomething()
{
counter++;
// Do more
return View();
}
}
}
有没有办法计算这个?我找不到任何关于这个主题的东西使用谷歌或在这里搜索SO,所以我假设我的措辞或我尝试实现这个的方式是不正确的,也许有人可以详细说明上面的代码并解释我在做什么错。
答案 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
}