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

时间:2014-12-24 09:27:40

标签: c# asp.net-mvc

我正在开发一个项目,能够计算调用方法的次数(或返回ActionResult)非常有帮助。但是,使用以下代码时,简单的计数器不起作用:

namespace Website.Controllers
{
    public class HomeController : BaseController
    {

        int counter = 0;

        public ActionResult DoSomething()
        {
            counter++;

            // Do more

            return View();
        }
    }
}

有没有办法计算这个?我找不到任何关于这个主题的东西使用谷歌或在这里搜索SO,所以我假设我的措辞或我尝试实现这个的方式是不正确的,也许有人可以详细说明上面的代码并解释我在做什么错。

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
}