我正在尝试在ASP.NET MVC中实现一些功能,我可以让每个用户每 n 分钟执行一次操作。
我遇到过控制器,比如Timer,但不太清楚要使用什么。我希望这样当用户执行动作时,计时器开始倒计时,例如3分钟到0:00。一旦3分钟过去,用户将能够再次执行该操作。
我是如何实现这一目标的?我需要定时器控制吗?
答案 0 :(得分:1)
这里有一个完美的解决方案:由SO团队创建的Best way to implement request throttling in ASP.NET MVC?。
基本上,我们的想法是在缓存中存储每个用户的页面匹配,然后根据您的逻辑响应请求。
答案 1 :(得分:1)
最简单的方法是在会话中保存最后一个操作的时间,并在后续请求中检查是否超过3分钟。例如:
public ActionResult DoSomething(){
if (Session["LastAction"] == null || (DateTime.Now - (DateTime)(Session["LastAction"])).Minutes > 3){
// do action
Session["LastAction"] = DateTime.Now;
return View("OK. action executed");
}
else{
return View("Please wait");
}
}
答案 2 :(得分:1)
您可以使用jquery-timer http://code.google.com/p/jquery-timer/
基本用法是禁用按钮,调用计时器,然后在完成时重新启用按钮。
但是,如果你想在过渡期间回复,这将无效。
答案 3 :(得分:1)
实现这一目标的最优雅方法是实现像Quartz.NET这样的作业调度程序,并定义正确的作业(必须完成的工作)和正确的触发器(何时/经常需要完成)。使用Quartz,您还可以实现更复杂的条件(“每周一”等)。
希望它会有所帮助。