【问题标题】:Azure API Management "rewrite-uri"Azure API 管理“重写 uri”
【发布时间】:2021-07-06 02:04:13
【问题描述】:

在使用 Azure Api 管理时,我无法在前端和后端之间的 url 路径中添加文本。

我有一个带有如下 URL 的 Azure 函数 API:

例如https://pXXXXX-myapi.azurewebsites.net/api/pXXXXX/alm/{name}

Azure API Management 创建的默认 api 是这样的:

例如https://myapi.azure-api.net/pXXXXX/pXXXXX/alm/{name}

理想情况下,我希望前端删除多余的 pXXXXX:

例如https://myapi.azure-api.net/pXXXXX/alm/{name}

如果我从前端移除它,例如GET /pXXXXX/alm/{name} 变为 GET /alm/{name}。 然后我收到 500 错误。 我认为这是因为删除“/pXXXXX”也会将其从后端路径中删除。

所以我尝试像这样使用 rewrite-uri 策略:

<rewrite-uri template="/pXXXXX/alm/{name}" copy-unmatched-params="false" />

我已经尝试了多种变体,但没有成功。

【问题讨论】:

  • 您能否澄清一下您的API现在是如何配置的,即:API的URL后缀是什么,Web服务URL,以及每个操作URI模板上是否有任何公共前缀。

标签: azure url-rewriting azure-api-management


【解决方案1】:

假设

  • 您已将操作的前端更改为“GET /alm/{name}”
  • 并且您的后端函数应用服务 url 是“https://pXXXXX-myapi.azurewebsites.net/api”
  • 并且您的 API 基本 URL 是“https://myapi.azure-api.net/pXXXXX”

然后rewrite-uri 与您粘贴的完全一样是正确的。您想在网址中添加前导“pXXXX”。 我已经在我身边重现了完全相同的场景并且它有效。

500 错误并不意味着路径有问题。如果您错误地配置了您的 url,您将得到 404。很可能在您的函数应用程序或 APIM 中的其他策略内部存在内部错误。只需将Ocp-Apim-Trace 标头设置为true 和允许跟踪的订阅密钥调用此API,您就会看到哪里出了问题。或者您可以根据需要在此处粘贴跟踪信息,以便我们提供帮助。

【讨论】:

  • 感谢您的帮助。我找到了解决方案并在下面发布。我正在使用内置测试功能检查跟踪但得到奇怪的结果,即使是 Microsoft 支持人员也无法弄清楚。 500 错误绝对不是来自我的应用程序,我可以从应用程序洞察力中看到它从未被击中。感谢您提供有关 Ocp-Apim-Trace 的提示,我一直不知道它的用途。
【解决方案2】:

发布我自己的答案,但感谢那些试图提供帮助的人。 我相信这个问题来自 APIM 本身的错误。 我认为它没有正确设置策略,因为现在它会自动将set-backend-service 包含在入站策略中,而在过去 2 天里我一直在重复地重新创建我的 api。

现在我的入站策略如下所示:

<inbound>
  <base />
  <set-backend-service id="apim-generated-policy" backend-id="pXXXXX-myapi" />
  <rewrite-uri template="/pXXXXX/alm/{name}" copy-unmatched-params="false" />
</inbound>

我的前端 api 看起来和以前一样:

/pXXXXX/alm/{name}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    相关资源
    最近更新 更多