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

时间:2017-09-01 21:50:35

标签: azure azure-functions

我使用路由网址subscriptions/{token}/t创建了一个Azure C#HTTP触发的功能。它适用于subscriptions/blah/t等网址,但对于包含编码斜杠的参数404失败:subscriptions/blah%2fblah/t。有什么方法吗?

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

2 个答案:

答案 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函数一起可靠地工作