1

我在 Azure API Manager 传出策略中有一个简单的测试

<policies>
    <inbound>
        <base />
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <set-body template="liquid">
        {% if context.Request.OriginalUrl.Query.param1 == 'test' %}
        Matched
        {% else %}
        Not Matched
        {% endif %}

        Hello : {{context.Request.OriginalUrl.Query.param1}}
        </set-body>
        <base />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>

我发布

/echo/resource?param1=test

我明白了

Not Matched

Hello : test

我无法弄清楚检查 param1 的值并在正文中采取相应措施的语法。我没有找到任何有帮助的像样的文档。我也试过这个

{% if context.Request.OriginalUrl.Query.param1.Equals('test') %}

有人可以就我需要检查的语法提出建议吗?这应该是微不足道的,它让我发疯!:)

谢谢

4

2 回答 2

2

除了马库斯的回答你也可以这样做

{% if context.Request.OriginalUrl.Query.param1[0] == 'test' %}

它是一组值是有道理的,这就是比较失败的原因。

于 2019-12-09T09:20:56.477 回答
2

如果我使用变量,它对我有用:

<policies>
<inbound>
    <set-variable name="param" value="@(context.Request.Url.Query.GetValueOrDefault("param1"))" />    
    <base />
</inbound>
<backend>
    <base />
</backend>
<outbound>
    <set-body template="liquid">
    {% if context.Variables["param"] == 'test' %}
    Matched
    {% else %}
    Not Matched
    {% endif %}

    Hello : {{context.Request.OriginalUrl.Query.param1}}
    </set-body>
    <base />
</outbound>
<on-error>
    <base />
</on-error>

结果:

Matched
Hello: test
于 2019-12-07T10:52:21.187 回答