在没有订阅密钥的情况下在Azure API管理中定义请求限制

时间:2019-08-20 17:25:06

标签: azure-api-management

我想对通过Azure API管理可公开访问(不需要订阅密钥)的某些终结点施加请求限制。我正在考虑一个可以说100K req / min的速率限制。我该如何实施? 我尝试过:

<rate-limit-by-key calls="3" renewal-period="15" counter-key="@(context.Subscription.Id)" />

但是我得到了一个可爱的“表达式评估失败。对象引用未设置为对象的实例。”因为没有传递订阅密钥。 我也不能通过IP地址来限制。

谢谢!

2 个答案:

答案 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")" ... />