我想对通过Azure API管理可公开访问(不需要订阅密钥)的某些终结点施加请求限制。我正在考虑一个可以说100K req / min的速率限制。我该如何实施? 我尝试过:
<rate-limit-by-key calls="3" renewal-period="15" counter-key="@(context.Subscription.Id)" />
但是我得到了一个可爱的“表达式评估失败。对象引用未设置为对象的实例。”因为没有传递订阅密钥。 我也不能通过IP地址来限制。
谢谢!
答案 0 :(得分:0)
API提供商还可以通过引入自定义标头来启用该策略,以允许开发人员的客户端应用程序将密钥传达给API。有关更多详细信息,请参阅document。
<rate-limit-by-key calls="3" renewal-period="15" counter-key="@(request.Headers.GetValueOrDefault("Rate-Key",""))" />
答案 1 :(得分:0)
如果您想将此类匿名调用划分为存储桶,而确实使用按密钥进行速率限制,则只需查找请求的其他方面即可。
如果您想将它们全部都对待,只需在键表达式中说明是否有空订阅即可
<rate-limit-by-key key="@(context.Subscription?.Id ?? "none")" ... />