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 中发挥作用?
Azure API 管理 - 与底层服务进行身份验证和授权同步