当包含编码哈希时,Azure API 管理不匹配传入请求 url 到 uri 模板

Azure API Management does not match incoming request url to uri template when contains encoded hash

由于某些客户要求,我们的 Azure API 管理必须能够处理带有包含井号 (#) 的 URL 的 GET 请求。唉,我找不到让它工作的方法。

所以,让我们假设有以下 url 模板: /products/{id}/items,其中 {id} 是一个字符串,其中可能包含 #.

我所做的是在从 Web 应用程序调用时对 {id} 进行编码,因此对 APIM 的示例调用是: https://contoso.apim.com/products/some%23id/items,其中%23编码为#号。

此类 url 在针对实际 API(顺便说一句,是部署到 Service Fabric 集群的 .net 核心 3 api)使用时得到正确处理,但是当通过APIM管理,请求returns404FABRIC_E_SERVICE_DOES_NOT_EXIST错误
如果我将 %23 替换为任何其他编码值,例如%20,uri 模板将被正确匹配并命中底层 API。

在 运行 一些 APIM 请求跟踪之后,我可以肯定地确认从 APIM 转发到后端的 url 没有被修剪或更改无论如何。

任何解决此问题的建议都将不胜感激。

花了一些时间,但最终 MS 团队发现这是 Service Fabric 反向代理中的一个错误,将在不久的将来修复。 我必须使用的解决方法涉及将参数从路由移动到查询参数,其中 # 编码得到正确处理。

31.03.2021 更新: Service Fabric 7.2 CU7 已发布,包含对所述问题的修复。