Сравнение параметров шаблона Azure Liquid

У меня есть простой тест в исходящей политике 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') %}

Может ли кто-нибудь посоветовать синтаксис, который мне нужно проверить? Это должно быть тривиально, и это сводит меня с ума! :)

Спасибо


person Gordon Thompson    schedule 06.12.2019    source источник


Ответы (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>

Result:

Matched
Hello: test
person Markus Meyer    schedule 07.12.2019

В дополнение к ответу Маркуса вы также можете сделать это так

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

Имеет смысл, что это массив значений, и поэтому сравнение не удалось.

person Gordon Thompson    schedule 09.12.2019