在 asp.net mvc 4 中使用 c# 对控制器中的方法调用进行计数
本文关键字:调用 方法 控制器 mvc net asp | 更新日期: 2023-09-27 18:35:07
我正在做一个项目,能够计算一个方法被调用(或ActionResult
被返回)的次数会非常有帮助。但是,使用以下代码,简单计数器不起作用:
namespace Website.Controllers
{
public class HomeController : BaseController
{
int counter = 0;
public ActionResult DoSomething()
{
counter++;
// Do more
return View();
}
}
}
有没有办法计算这个?我无法使用Google或在SO上搜索找到有关此主题的任何内容,因此我认为我的措辞方式或我尝试实现的方式不正确,也许有人可以详细说明上面的代码并解释我做错了什么。
您正在实现的计数器在内存中工作。如果应用程序重新启动,计数器将被重置。
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
}