gpt4 book ai didi

api - 如何通过使用自定义 apiKey(而不是订阅 ID)在 azure api 管理中使用速率限制?

转载 作者:行者123 更新时间:2023-12-02 23:01:05 27 4
gpt4 key购买 nike

通过使用可以轻松限制 api 的速率,

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

但我需要通过使用 apiKey 作为请求参数发送来限制 api 的速率。

最佳答案

首先,我从您的示例中假设您希望将请求本身的一个元素指定为 counter-key 而不是订阅 ID(如示例中所示)。如果这是正确的,那么...

The docs给出以下使用 policy expression 的示例指定计数器键

<policies>
<inbound>
<base />
<rate-limit-by-key calls="10"
renewal-period="60"
increment-condition="@(context.Response.StatusCode == 200)"
counter-key="@(context.Request.IpAddress)"
remaining-calls-variable-name="remainingCallsPerIP"/>
</inbound>
<outbound>
<base />
</outbound>
</policies>

假设您提到的 API key 将作为请求 header 传入,看起来您可以执行以下操作:

<rate-limit-by-key counter-key='@(context.Request.Headers.TryGetValue("YourApiKey"))' ... />

如果您想处理 ApiKey 根本不包含在请求中的情况,看起来您可以使用多行策略表达式:

<rate-limit-by-key 
counter-key='@{
if (context.Request.Headers.TryGetValue("YourApiKey", out value))
{
if(value != null && value.Length > 0)
{
return value;
}
}
return null;
}'
calls='@{
if (context.Request.Headers.TryGetValue("YourApiKey", out value))
{
if(value != null && value.Length > 0)
{
return 500;
}
}
return 0;
}'
...
/>

注意:我尚未测试此处建议的任何策略,但我认为此处的最后一项将允许每个 {YourApiKey} 每个周期 500 个请求,并且如果未提供 Api key ,则不允许任何请求。

关于api - 如何通过使用自定义 apiKey(而不是订阅 ID)在 azure api 管理中使用速率限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51788739/

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