我有一个问题与利率限制的关键,repsonse是不符合预期。
使用此策略片段时:
<rate-limit-by-key calls="1" renewal-period="2" counter-key="@(context.Request.IpAddress)" increment-condition="@(context.Response.StatusCode == 200)" />
字符串
当达到限制时,它有时会给出“500内部服务器错误”,有时会给出“401未经授权”的响应。
当我使用这个:
<set-variable name="CounterKey" value="context.Request.IpAddress" />
<rate-limit-by-key calls="1" renewal-period="2" counter-key="@(context.Variables.GetValueOrDefault<string>("CounterKey"))" increment-condition="@(context.Response.StatusCode == 200)" />
型
我得到了预期的“429太多的请求”响应代码时达到限制。
还尝试了IpAddress的.Tostring。
<rate-limit-by-key calls="1" renewal-period="2" counter-key="@(context.Request.IpAddress.ToString())" increment-condition="@(context.Response.StatusCode == 200)" />
型
还是500和401的回复
set-varaiable和rate-limit-by-key在完全相同的上下文/范围内,所以不明白为什么它给出不同的响应。
有什么想法吗
1条答案
按热度按时间r1zhe5dt1#
我已经尝试了下面的政策,在我的结束使用回声API,但总是得到200 OK结果,因为
renewal-period
被设置为2秒,所以限制很快就会更新。但在频繁拨打电话后,我看到了“429 Too Many Requests”响应代码。请检查您是否配置了任何其他策略或创建任何新的API并尝试此策略,因为它给了我预期的结果。
一米
字符串
Output:
的数据
为了频繁地得到“429 Too Many Requests”响应代码,我将
renewal-period
增加到30秒,得到了下面的结果。的
我也试过
<rate-limit-by-key calls="1" renewal-period="2" counter key="@(context.Request.IpAddress.ToString())" increment-condition="@(context.Response.StatusCode == 200)" />
策略,它也像我预期的那样工作。