gpt4 book ai didi

c# - 如何限制 Web Api 中的请求?

转载 作者:IT王子 更新时间:2023-10-29 03:55:51 24 4
gpt4 key购买 nike

我正在尝试通过以下方式实现请求限制:

Best way to implement request throttling in ASP.NET MVC?

我已将该代码提取到我的解决方案中,并使用以下属性装饰了一个 API Controller 端点:

[Route("api/dothis/{id}")]
[AcceptVerbs("POST")]
[Throttle(Name = "TestThrottle", Message = "You must wait {n} seconds before accessing this url again.", Seconds = 5)]
[Authorize]
public HttpResponseMessage DoThis(int id) {...}

这会编译,但不会命中属性的代码,并且限制不起作用。我没有收到任何错误。我错过了什么?

最佳答案

建议的解决方案不准确。至少有 5 个原因。

  1. 缓存不提供不同线程之间的互锁控制,因此可以同时处理多个请求,从而引入额外的调用以跳过限制。
  2. 过滤器在 Web API 管道中的处理“太晚了”,因此在您决定不应处理该请求之前,已经花费了大量资源。应该使用 DelegatingHandler,因为它可以设置为在 Web API 管道的开头运行,并在执行任何其他工作之前切断请求。
  3. Http 缓存本身是依赖项,可能不适用于新的运行时,例如自托管选项。最好避免这种依赖。
  4. 上例中的缓存并不能保证它在调用之间存在,因为它可能会因内存压力而被删除,尤其是低优先级时。
  5. 虽然这不是太糟糕的问题,但将响应状态设置为“冲突”似乎并不是最佳选择。最好改用“429-请求太多”。

在实现 throttle 的过程中,还有更多的问题和隐藏的障碍需要解决。有免费的开源选项可用。我建议看看 https://throttlewebapi.codeplex.com/ ,例如。

关于c# - 如何限制 Web Api 中的请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20817300/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com