Azure API 管理策略 - 动态命名值选择

mad*_*snb 8 policy azure-api-management

我已经根据用户 ID 存储了一个命名值,因此我可以通过我选择的参考来识别有效负载提交者。

当我使用下面的策略时,我获取字符串形式的值,而不是实际查找命名值。如果我只是将用户 ID 写在双大括号内,而不是从上下文中动态获取它,则查找工作正常,并且会替换为我想要的命名值。

难道就不能用简单的方法来做吗?

<policies>
  <inbound>
    <set-header name="x-request-context-data" exists-action="override">
      <value>{{@(context.User.Id)}}</value>
    </set-header>
  </inbound>
</policies>
Run Code Online (Sandbox Code Playgroud)

输出:

x-request-context-data: {{@(context.User.Id)}}
Run Code Online (Sandbox Code Playgroud)

mad*_*snb 6

在MSDN上回答了。

虽然您可以在策略表达式中使用命名值,但不支持也不可能支持相反的方式,如此功能请求中所述。

解决方法是

  • 将命名值存储为 JSON 字符串或带有键=值对的 CSV 字符串。然后使用策略表达式来解析并获取所需的值。
  • 使用控制流策略进行运行时决策。
  • 对于复杂的情况,请卸载到函数应用程序,但如果可能,请使用值缓存策略来改善延迟