【问题标题】:How to create and use list in Azure API-manager policy?如何在 Azure API-manager 策略中创建和使用列表?
【发布时间】:2022-09-26 08:54:34
【问题描述】:

背景: 我在 Azure API 管理中定义一个 API。 我已经在“所有操作”级别上定义了一个策略。这个政策做了几件事。它所做的一件事是在上下文对象中设置一个变量,因此我可以在 when 条件下重新使用该变量。

我需要帮助:

如何在 Azure API-M 策略中定义一个列表,我可以在 when 条件下引用它?

代码示例

所有运营政策:

<policies>
    <inbound>
        <base />
        <set-variable name=\"someList\" value=\"[a,b,c,d]\" />
        <when condition=\"@(context.Variables[\"someList\"].Contains(\"a\"))\"
        </when>
        <otherwise>
        </otherwise>
    </inbound>
</policies>

看来我的问题是变量 \"someList\" 没有被识别为数组,而是作为 String = \"[a,b,c,d]\"。所以基本上,如果条件是 Contains(\"[\"),它将返回 true。

我也尝试将值存储为命名值,但命名值不能包含数组作为值。

我想要实现的是保留订阅列表,以便我可以将请求中的传入订阅密钥与预定义订阅密钥列表相匹配。

    标签: azure azure-api-management policy azure-policy


    【解决方案1】:

    在使用 .ContainsKey('key') 之前,尝试将 context.Variables['somelist'] 解析为列表。 我从来不需要解析一个列表,所以你必须用谷歌搜索它是怎么做的,但我已经做了一些像这样的 string ou int 解析。为此,请使用 C# 和 Dictionary 或 List 等关键字。

    @{
       string int = context.Variables['var'];
       return int > 5;
    }
    

    Api 管理为您提供了“GetValueOrDefault”方法,让您可以捕获标头、变量或查询并直接对其进行解析,您可以在此处找到它。

    https://learn.microsoft.com/en-us/azure/api-management/api-management-policy-expressions

    【讨论】:

      猜你喜欢
      • 2020-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 2020-02-14
      • 1970-01-01
      相关资源
      最近更新 更多