Azure API Management "rewrite-uri"



使用Azure Api Management时,我在前端和后端之间的url路径中添加文本时遇到困难。

我有一个Azure函数api,其url如下:

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

Azure api管理创建的默认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";也将其从后端路径中删除。

因此,我尝试使用重写uri策略,如下所示:

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

我尝试过多种变体,但都没有成功。

假设

  • 您已将操作的前端更改为";GET/alm/{name}">
  • 并且您的后端功能应用程序服务url是";https://pXXXXX-myapi.azurewebsites.net/api">
  • 并且您的API基础URL是";https://myapi.azure-api.net/pXXXXX">

则与粘贴的rewrite-uri完全相同是正确的。您要添加前导";pXXXXX";到url。我已经在我这边重现了完全相同的场景,而且效果很好。

500错误并不意味着路径有问题。如果你错误地配置你的url,你会得到404。很可能您的函数应用程序或APIM中的其他策略中存在内部错误。只要调用这个API,将Ocp-Apim-Trace头设置为true,并使用允许跟踪的订阅密钥,您就会发现问题所在。或者,如果你愿意,你可以在这里粘贴痕迹,这样我们就可以提供帮助。

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

最新更新