【问题标题】:HTTP trigger azure function won't bind route parameter with encoded slashesHTTP 触发 azure 函数不会将路由参数与编码斜杠绑定
【发布时间】:2020-05-28 09:21:29
【问题描述】:

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

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

【问题讨论】:

    标签: azure azure-functions


    【解决方案1】:

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

    token = escape(escape(token));
    

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

    注意,单一转义不能可靠地与 Azure 函数一起工作

    【讨论】:

      【解决方案2】:

      但对于包含编码斜杠的参数,它会失败并返回 404:subscriptions/blah%2fblah/t。

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

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

      【讨论】:

      • 同意,但是编码参数的目的是什么,而不是确保它按原样(带有斜线......)击中我的操作/功能?
      • 令牌中有多少个斜线?是固定尺寸吗?如果是,您可以修改您的路由 URL 以匹配它。否则,您需要使用自己的方式对令牌进行编码。
      • 有什么更新吗?如果您还有其他问题,请随时告诉我。
      • 我已经完成了对斜线的编码,并且等于一些不那么冒犯的东西,不过我会在 azure 论坛上做一个报告,这听起来不对...
      猜你喜欢
      • 2017-10-23
      • 2019-05-22
      • 2020-05-29
      • 2012-11-09
      • 1970-01-01
      • 2021-10-30
      • 2015-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多