微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决当包含编码的哈希时,Azure API 管理不会将传入请求 url 与 uri 模板匹配

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

那么,让我们假设有一个如下的 url 模板: /products/{id}/items,其中 {id}一个可能包含 # 的字符串。

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

当针对实际 API(顺便说一句,它是部署到 Service Fabric 集群的 .net core 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 已发布,包含对所述问题的修复。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。