1

如何将传入的请求限制为一个 Action,例如我不希望用户重复向 Action 发布数据。有什么方法可以申请 Actions 的时间限制吗?

4

2 回答 2

2

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

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

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

于 2012-12-30T07:16:26.290 回答
1

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

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

容易吗?

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

哦。信号量怎么样,在概念上适合你的问题。

于 2012-12-30T07:36:27.520 回答