我使用路由网址subscriptions/{token}/t
创建了一个Azure C#HTTP触发的功能。它适用于subscriptions/blah/t
等网址,但对于包含编码斜杠的参数404
失败:subscriptions/blah%2fblah/t
。有什么方法吗?
在我们进行辩论之前,{token}
是一个URL编码的Base64字符串,它自然会包含斜杠。
答案 0 :(得分:0)
但是对于包含编码斜杠的参数,它失败了:subscriptions / blah%2fblah / t。
这是有道理的,因为' subscriptions / blah%2fblah / t'等于' subscriptions / blah / blah / t'。我建议你为斜杠定义自己的编码规则。例如,您可以将所有斜杠转换为' [[ - ]]'。您的令牌将是这样的' subscriptions / blah [[ - ]] blah / t'。收到令牌后,您可以将特殊字符转换回来。
token = token.Replace("[[-]]", "/");
答案 1 :(得分:0)
这个问题似乎仍然存在。 我发现可以通过对字符串进行两次转义来解决,即,以递归方式两次转义。
token = escape(escape(token));
在.NET中,您可以使用URI.EsacpeDataString()
在JS中,您可以使用encodeURIComponent()
请注意,单转义不能与Azure函数一起可靠地工作