如何在一段时间内限制请求数到一个动作

本文关键字:一个 一段时间 请求 | 更新日期: 2023-09-27 17:50:09

如何限制传入请求到Action,例如我不希望用户重复向Action发布数据。有没有办法为行动设定时间限制?

如何在一段时间内限制请求数到一个动作

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

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

请注意,非合法用户将很容易绕过所有不依赖于服务器端存储的限制(如会话状态)。如果你不能授权用户(即通过用户名),限制现有会话的数量也可能是有问题的。

这是一个简单的方法。

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

简单不是吗?

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

哦。信号量呢,概念上适合你的问题。