Azure APIM 网关正在修剪 api url 中的尾部斜杠

Posted

技术标签:

【中文标题】Azure APIM 网关正在修剪 api url 中的尾部斜杠【英文标题】:Azure APIM Gateway is trimming the trailing slash in the api url 【发布时间】:2021-09-16 23:53:19 【问题描述】:

我需要向 APIM 中托管的 API 添加斜杠。但是,APIM 网关在将调用转发到后端服务时似乎正在删除尾部斜杠。

示例 1

APIM 网关 URL:https://api.domain.com/getdata/

后端服务网址:https://mybackendservice.domain.com/getdata

示例 2

APIM 网关 URL:https://api.domain.com/getdata/?q=1&r=2

后端服务网址:https://mybackendservice.domain.com/getdata?q=1&r=2

有人可以建议我们可以添加的任何 URL 重写策略以保留尾部斜杠,以便后端服务 URL 为:

https://mybackendservice.domain.com/getdata/

https://mybackendservice.domain.com/getdata/?q=1&r=2

【问题讨论】:

【参考方案1】:

谢谢Vitaliy Kurokhtin,发表您的建议作为帮助其他社区成员的答案。

“假设您有一个主机名为my-service.azure-api.net的APIM服务。APIM服务中的一个API,URL后缀为my-api,后端URI为https://my-backend.com。这个API中的一个操作,URI模板为my/uri/template .

所以对于来电

https://my-service.azure-api.net/my-api/my/uri/template

无需任何额外配置 APIM 服务就会调用

https://my-backend.com/my/uri/template

因为默认情况下,APIM 服务将源 URI 方案+主机名+api 后缀替换为为相关 API 定义的后端 URI。

在最简单的情况下,当您的 API 只有一个操作时,您可以将 API 后缀设置为 api/v1/storenumber/ordernumber,将操作模板设置为 /。这将导致https://api.example.com/api/v1/storenumber/ordernumber的面向公众的URI

以及此操作的后端 URI

https://back-end.service.com/

当然,当您在 API 中有多个操作时,这种方法更难使用。在这种情况下,您需要使用策略:Rewrite URL |MS DOC。为此,您可以将 API 后缀和操作 URI 模板设置为任何内容,但将此策略添加到操作的入站部分:

<rewrite-uri template="/" />

rewrite-uri 策略的作用是覆盖后端请求的操作 URI 模板"

参考: Azure APIM "rewrite-uri" policy - How to remove the URL suffix?

【讨论】:

以上是关于Azure APIM 网关正在修剪 api url 中的尾部斜杠的主要内容,如果未能解决你的问题,请参考以下文章

Azure APIM URL 引发 System.Net.WebException - SSL/TLS 如何在 azure web api 和 azure APIM 中发挥作用?

通过 APIM 使用 Azure 功能的 REST URL

Azure APIM 策略

Azure API 管理 - 与底层服务进行身份验证和授权同步

如何阻止 Azure APIM 中的恶意请求反复达到速率或配额限制?

从 Azure Apim 的上下文中读取命名值