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

Defining request limits in Azure API Management with no subscription key

我想对一些可通过 Azure API 管理公开访问(无需订阅密钥)的端点施加请求限制。我正在考虑假设 100K req/min 的速率限制。我该如何实施? 我试过了:

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

但后来我得到了一个可爱的 "Expression evaluation failed. Object reference not set to an instance of an object." 因为没有传递订阅密钥.. 我也不能通过IP地址限制..

谢谢!!

API 提供程序也可以通过引入自定义 header 来启用该策略,以允许开发人员的客户端应用程序将密钥传递给 API。详情请参考document.

<rate-limit-by-key calls="3" renewal-period="15" counter-key="@(request.Headers.GetValueOrDefault("Rate-Key",""))" />

如果你想把这样的匿名调用分离到桶中,确实使用rate-limit-by-key,只是找到一些其他方面的请求到base key的。

如果您想对它们一视同仁,只需在您的键表达式中考虑空订阅:

<rate-limit-by-key key="@(context.Subscription?.Id ?? "none")" ... />