HTTP 触发器 azure 函数不会将路由参数与编码的斜杠绑定

HTTP trigger azure function won't bind route parameter with encoded slashes

我创建了一个 Azure C# HTTP 触发函数,其路由 url:subscriptions/{token}/t。它适用于 url,例如 subscriptions/blah/t,但对于包含编码斜杠的参数 404,它会失败:subscriptions/blah%2fblah/t。有什么解决办法吗?

在我们开始争论之前,{token} 是一个 URL 编码的 Base64 字符串,自然会包含斜杠。

but it fails with a 404 for parameters that contain encoded slashes: subscriptions/blah%2fblah/t.

这是有道理的,因为 'subscriptions/blah%2fblah/t' 等于 'subscriptions/blah/blah/t'。我建议您为斜杠定义自己的编码规则。例如,您可以将所有斜线转换为“[[-]]”。您的令牌将像这样 'subscriptions/blah[[-]]blah/t'。收到令牌后,您可以将特殊字符转换回来。

token = token.Replace("[[-]]", "/");

这个问题似乎仍然存在。 我发现可以通过对字符串进行两次转义来解决,即递归应用转义两次。

token = escape(escape(token));

在 .NET 中您可以使用 URI.EsacpeDataString()
在 JS 中你可以使用 encodeURIComponent()

请注意,单个转义不能可靠地用于 Azure 函数