如何在一段时间内将请求数限制为Action

时间:2012-12-30 06:43:56

标签: c# .net asp.net-mvc

如何限制对Action的传入请求,例如我不希望用户反复将数据发布到Action。有没有办法对行动申请时限?

2 个答案:

答案 0 :(得分:2)

您通常无法限制传入的请求 - 它们来自您无法控制的计算机。您可以做的是拒绝请求(即503响应),或者如果您以某种方式控制客户端,您可以限制合法客户端的请求数量。

为了能够合理地拒绝传入请求,您需要知道有关每个特定用户的先前请求的一些信息(即存储在cookie中的最后请求时间/索引,或存储在会话状态中的某些信息)。有了这些信息,您应该能够编写将检查条件并拒绝请求的操作过滤器。

请注意,非合法用户可以轻松绕过所有不依赖于服务器端存储的限制(如会话状态)。如果您无法自动化用户(即通过用户名),限制现有会话的数量也可能是问题......

答案 1 :(得分:1)

这是我会做的一种简单方法。

为每个用户创建一个Guid,以及上一个发布日期时间,将其推送到用户,就像在cookie中一样。每次用户发布内容时,请阅读cookie。检查日期时间,如果用户在用户可以再次发布之前发布了某些内容,则返回响应,说“放慢老虎!”否则继续。您可以自己定义此Timespan。

容易没有?

另一方面,如果您只想让10个用户调用您的操作,则需要一个原子计数器。 Interlocked是你的朋友。您可以在方法的开头递增,然后在结束时递减。

喔。信号量怎么样,从概念上讲适合你的问题。