在asp.net mvc 4中使用c#计算控制器中的方法调用
我正在从事一个项目,如果能够计算方法被调用的次数(或返回的在asp.net mvc 4中使用c#计算控制器中的方法调用,c#,asp.net-mvc,C#,Asp.net Mvc,我正在从事一个项目,如果能够计算方法被调用的次数(或返回的ActionResult),这将非常有帮助。但是,使用以下代码时,简单计数器不起作用: namespace Website.Controllers { public class HomeController : BaseController { int counter = 0; public ActionResult DoSomething() {
ActionResult
),这将非常有帮助。但是,使用以下代码时,简单计数器不起作用:
namespace Website.Controllers
{
public class HomeController : BaseController
{
int counter = 0;
public ActionResult DoSomething()
{
counter++;
// Do more
return View();
}
}
}
有办法数一数吗?我在谷歌上找不到关于这个主题的任何东西,或者在这里搜索,所以我认为我的措辞或者我尝试实现这个主题的方式是不正确的,也许有人可以详细说明上面的代码,并解释我做错了什么。你正在实现的计数器在内存中工作。如果应用程序重新启动,计数器将重置
计数器
变量必须是静态的,因此它将一直工作,直到应用程序池没有重新启动。它也必须是线程保存
在递增计数器之前,必须锁定共享对象(它也可能是静态变量)
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
state
if(Session["counterKey"] != null)
{
int counter = (int)Session["counterKey"];
counter++;
Session["counterKey"] = counter;
}
else
{
Session["counterKey"] = 1; // first call
}
您正在实现的计数器在内存中工作。如果应用程序重新启动,计数器将重置
计数器
变量必须是静态的,因此它将一直工作,直到应用程序池没有重新启动。它也必须是线程保存
在递增计数器之前,必须锁定共享对象(它也可能是静态变量)
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
state
if(Session["counterKey"] != null)
{
int counter = (int)Session["counterKey"];
counter++;
Session["counterKey"] = counter;
}
else
{
Session["counterKey"] = 1; // first call
}
您正在实现的计数器在内存中工作。如果应用程序重新启动,计数器将重置
计数器
变量必须是静态的,因此它将一直工作,直到应用程序池没有重新启动。它也必须是线程保存
在递增计数器之前,必须锁定共享对象(它也可能是静态变量)
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
state
if(Session["counterKey"] != null)
{
int counter = (int)Session["counterKey"];
counter++;
Session["counterKey"] = counter;
}
else
{
Session["counterKey"] = 1; // first call
}
您正在实现的计数器在内存中工作。如果应用程序重新启动,计数器将重置
计数器
变量必须是静态的,因此它将一直工作,直到应用程序池没有重新启动。它也必须是线程保存
在递增计数器之前,必须锁定共享对象(它也可能是静态变量)
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
state
if(Session["counterKey"] != null)
{
int counter = (int)Session["counterKey"];
counter++;
Session["counterKey"] = counter;
}
else
{
Session["counterKey"] = 1; // first call
}
你真的只需要一个计数器,还是这是一个XY问题,你正试图重新发明应用程序监控?你为什么要计算它?你想解决什么问题?我想数一数,因为这是我能想到的比较某个变量调用次数的最简单方法,我可以用它在我的网站上显示/不显示按钮。“比较某个[动作方法]调用次数”-现在我们有了进展,但你对这个问题的解释还不够充分,没有找到合适的解决办法。该变量对所有用户都有效,还是根据用户调用该方法的次数显示/隐藏一个用户的按钮?计数器的寿命有多长,是否应在appdomain回收之间保留该值?它应该再次存储为每个用户还是每个应用程序?静态变量将对所有用户计数。不要使用这种解决方案,因为当你有多个访问者时,它会破坏你的网站(用两个浏览器测试)。重写您的问题,并包含实际的相关代码,以便人们能够提出适当的解决方案。您真的只需要一个计数器,还是这是一个XY问题,您正在尝试重新设计应用程序监控?为什么要计算它?你想解决什么问题?我想数一数,因为这是我能想到的比较某个变量调用次数的最简单方法,我可以用它在我的网站上显示/不显示按钮。“比较某个[动作方法]调用次数”-现在我们有了进展,但你对这个问题的解释还不够充分,没有找到合适的解决办法。该变量对所有用户都有效,还是根据用户调用该方法的次数显示/隐藏一个用户的按钮?计数器的寿命有多长,是否应在appdomain回收之间保留该值?它应该再次存储为每个用户还是每个应用程序?静态变量将对所有用户计数。不要使用这种解决方案,因为当你有多个访问者时,它会破坏你的网站(用两个浏览器测试)。重写您的问题,并包含实际的相关代码,以便人们能够提出适当的解决方案。您真的只需要一个计数器,还是这是一个XY问题,您正在尝试重新设计应用程序监控?为什么要计算它?你想解决什么问题?我想数一数,因为这是我能想到的比较某个变量调用次数的最简单方法,我可以用它在我的网站上显示/不显示按钮。“比较某个[动作方法]调用次数”-现在我们有了进展,但你对这个问题的解释还不够充分,没有找到合适的解决办法。该变量对所有用户都有效,还是根据用户调用该方法的次数显示/隐藏一个用户的按钮?计数器的寿命有多长,是否应在appdomain回收之间保留该值?它应该再次存储为每个用户还是每个应用程序?静态变量将对所有用户计数。不要使用这种解决方案,因为当你有多个访问者时,它会破坏你的网站(用两个浏览器测试)。重写您的问题,并包含实际的相关代码,以便人们能够提出适当的解决方案。您真的只需要一个计数器,还是这是一个XY问题,您正在尝试重新设计应用程序监控?为什么要计算它?你想解决什么问题?我在努力