当包含编码哈希时,Azure API 管理不会将传入请求 URL 与 uri 模板匹配



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

因此,让我们假设有以下网址模板:/products/{id}/items,其中{id}是一个可能包含 # 的字符串。

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

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

运行一些 APIM 请求跟踪后,我绝对可以确认从 APIM 转发到后端的 url 没有以任何方式修剪或更改。

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

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

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

最新更新