Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在一段时间内将请求数限制为一个操作_C#_.net_Asp.net Mvc - Fatal编程技术网

C# 如何在一段时间内将请求数限制为一个操作

C# 如何在一段时间内将请求数限制为一个操作,c#,.net,asp.net-mvc,C#,.net,Asp.net Mvc,如何将传入的请求限制为某个操作,例如,我不希望用户重复向操作发布数据。有没有办法对操作施加时间限制?您通常不能限制传入的请求-它们来自您无法控制的机器。您可以做的是拒绝请求(即503个响应),或者如果您以某种方式控制客户端,您可以限制合法客户端发出的请求数量 为了能够合理地拒绝传入请求,您需要了解关于每个特定用户以前请求的一些信息(即存储在cookie中的上次请求时间/索引,或存储在会话状态中的一些信息)。有了这些信息,您应该能够编写操作过滤器来检查条件并拒绝请求 请注意,非合法用户可以轻松绕过

如何将传入的请求限制为某个操作,例如,我不希望用户重复向操作发布数据。有没有办法对操作施加时间限制?

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

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


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

这里有一个简单的方法

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

简单不

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


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

你能提供更多关于发布内容的信息吗?用户是否已登录?还是访客用户?+1这说明了一点
您可以做的是拒绝请求(即503个响应)