我正在尝试在 ASP.NET MVC 中实现一些东西,我可以让每个用户每n分钟执行一次操作。
我遇到过诸如 Timer 之类的控件,但不太确定要使用什么。我希望这样当用户执行操作时,计时器开始倒计时,例如从 3 分钟到 0:00。3 分钟过后,用户将能够再次执行该操作。
有什么想法可以实现这一目标吗?我需要定时器控件吗?
我正在尝试在 ASP.NET MVC 中实现一些东西,我可以让每个用户每n分钟执行一次操作。
我遇到过诸如 Timer 之类的控件,但不太确定要使用什么。我希望这样当用户执行操作时,计时器开始倒计时,例如从 3 分钟到 0:00。3 分钟过后,用户将能够再次执行该操作。
有什么想法可以实现这一目标吗?我需要定时器控件吗?
实现这一点最优雅的方法是实现像Quartz.NET这样的作业调度程序并定义正确的作业(必须做什么)和正确的触发器(何时/多久必须完成)。使用 Quartz,您还可以实现更复杂的条件(“每周一做”等)。
希望它会有所帮助。
这里有一个完美的解决方案:Best way to implement request throttling in ASP.NET MVC? 由 SO 团队创建。
基本上,这个想法是将每个用户的页面命中存储在缓存中,然后根据您的逻辑响应请求。
最简单的方法是保存会话中最后一个操作的时间,并在后续请求中检查它是否超过 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");
}
}
您可以使用 jquery-timer http://code.google.com/p/jquery-timer/
基本用途是禁用按钮,调用计时器,然后在完成时重新启用按钮。
但是,如果您想在此期间回帖,这将行不通。