Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.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# 如何在web api中减慢过多的请求,而不是返回429?_C#_Asp.net_Security_Asp.net Web Api_Throttling - Fatal编程技术网

C# 如何在web api中减慢过多的请求,而不是返回429?

C# 如何在web api中减慢过多的请求,而不是返回429?,c#,asp.net,security,asp.net-web-api,throttling,C#,Asp.net,Security,Asp.net Web Api,Throttling,我们有一个API,它是一个巨大数据库的接口。我们将对它的访问权作为一项服务出售,然后我们的客户就能够获得数据 但是,我们的目标之一是拒绝任何试图以比普通用户更快的速度访问我们数据库的bot,将其限制为一次只请求几个请求(即每两秒钟一个请求) 目前我正在使用它,但是我不知道如何只是“减慢”请求,而不是返回“太多请求”错误。例如,创建一个请求队列,然后使用类似Thread.Sleep()的方法将其限制为每秒一个请求,而不是立即返回错误并实际返回有效数据 这是一种好的做法吗?我如何才能做到这一点?“这

我们有一个API,它是一个巨大数据库的接口。我们将对它的访问权作为一项服务出售,然后我们的客户就能够获得数据

但是,我们的目标之一是拒绝任何试图以比普通用户更快的速度访问我们数据库的bot,将其限制为一次只请求几个请求(即每两秒钟一个请求)

目前我正在使用它,但是我不知道如何只是“减慢”请求,而不是返回“太多请求”错误。例如,创建一个请求队列,然后使用类似Thread.Sleep()的方法将其限制为每秒一个请求,而不是立即返回错误并实际返回有效数据


这是一种好的做法吗?我如何才能做到这一点?

“这是一个好的做法吗?”绝对不是,您限制使用的全部原因是为了避免占用太多资源。如果您开始对请求进行排队,您将很快耗尽Web服务器的资源,其中的连接正在队列中等待结果,并使自己面临DoS攻击。可能是@ScottChamberlain的重复,正如我所想。然而,我们真正关心的是在不返回错误的情况下限制对数据库的访问速度。Azure上还有其他一些阻止DoS的服务attacks@Adam非常接近,但并没有真正帮助我解决减慢请求速度的问题。我们的API是有版本控制的,它在第三个版本上,每个版本中都有很多控制器。实际上,我是在考虑使用MessageHandler之类的工具来同时管理整个API,或者类似的东西。如果你想继续放慢速度,我认为最简单的解决方案是使用异步操作过滤器,它将等待任务。根据你的节流逻辑,延迟(…)内部;因此,您可以让IIS排队等待免费和最少的代码来编写。