在 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上搜索找到有关此主题的任何内容,因此我认为我的措辞方式或我尝试实现的方式不正确,也许有人可以详细说明上面的代码并解释我做错了什么。

在 asp.net mvc 4 中使用 c# 对控制器中的方法调用进行计数

您正在实现的计数器在内存中工作。如果应用程序重新启动,计数器将被重置。

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
}