Определение лимитов запросов в Azure API Management без ключа подписки

Я хотел бы наложить ограничения на запросы для некоторых конечных точек, которые общедоступны (ключ подписки не требуется) через Azure API Management. Я думаю об ограничении скорости, скажем, 100 тыс. Запросов / мин. Как я могу это реализовать? Я пытался:

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

но потом я получил прекрасное сообщение «Оценка выражения не удалась. Ссылка на объект не установлена ​​на экземпляр объекта». потому что не передается ключ подписки .. Я тоже не могу ограничить по IP-адресу ..

Спасибо!!


person Jose Parra    schedule 20.08.2019    source источник


Ответы (2)


Если вы хотите разделить такие анонимные вызовы на сегменты, действительно используйте ограничение скорости по ключам, просто найдите другой аспект запроса для базового ключа.

Если вы хотите относиться ко всем одинаково, просто укажите в своем ключевом выражении нулевую подписку:

<rate-limit-by-key key="@(context.Subscription?.Id ?? "none")" ... />
person Vitaliy Kurokhtin    schedule 21.08.2019

Политика также может быть включена поставщиком API путем введения настраиваемого заголовка, позволяющего клиентскому приложению разработчика передавать ключ API. Дополнительные сведения см. В документ.

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

person Community    schedule 21.08.2019
comment
Мне нравится эта идея, но это заставит нас изменить каждый вызов в пользовательском интерфейсе клиента для передачи этого заголовка. Я не ожидал изменений кода. Спасибо - person Jose Parra; 21.08.2019