我的 APIM 中有一项策略,用于在名为“client-id”的标头在一分钟内调用端点两次以上时限制对端点的调用。 节流部分工作正常,但达到限制时的响应主体不是我预期的。
来自 https://stackoverflow.com/a/65576593/22934799 我希望响应正文是带有状态代码和消息的 json,但我得到的是带有 HTTP 403 Forbidden 的 html:
<html>
<head>
<title>Request Rejected</title>
</head>
<body>The requested URL was rejected. Please consult with your
administrator.<br><br>Your support ID is: 11411346622183591440</body>
</html>
这里发生了什么?对于 API 来说,获取 HTML 并不是很干净。
相关政策。
<rate-limit-by-key calls="2"
renewal-period="60"
counter-key="@(context.Request.Headers.GetValueOrDefault("client-id",""))"
/>
我还尝试将策略放在 APIM Web 中的 Echo API 上(没有其他可能干扰的策略)并点击它直到触发限制,但随后它只是给我一个警告通知,说“无法完成请求。请尝试”稍后再试。”这并不是很有帮助,因为它没有提供 http 代码或任何东西。
当超出定义的限制时,我能够获得
rate-limit-by-key
政策的预期响应。
我在 Echo API 中使用此策略。
<policies>
<inbound>
<base />
<rate-limit-by-key calls="2" renewal-period="60" counter-key="@(context.Request.Headers.GetValueOrDefault("client-id",""))" />
</inbound>
</policies>
测试-
当超过限制呼叫时,我得到的响应低于
它只是给我一个警告通知,说“无法完成请求。请稍后再试。”这并不是很有帮助,因为它没有提供 http 代码或任何东西。
尝试刷新/加载页面并检查,我相信您也会得到结果,否则您可以创建一个新的 APIM 实例并尝试。如果您的问题仍然存在,我建议您与产品团队联系。