如何在代理中查询参数检查时处理Apigee错误情况

时间:2014-01-21 15:58:00

标签: apigee

我有以下内容。允许参数“g”为“on”或“off”,否则转到错误策略。但是,永远不会调用异常情况。相反,如果不是“开”或“关”的东西被传递为“g”,则调用“on”情况。这是为什么?或者,有更好的表达方式吗?

<PreFlow name="PreFlow">
    <Request>
        <Step>
            <Condition>message.queryparam.g := "on"</Condition>
            <Name>GOn</Name>
        </Step>
        <Step>
            <Condition>message.queryparam.g := "off"</Condition>
            <Name>GOff</Name>
        </Step>
        <Step>
            <Condition>!((message.queryparam.g := "off") || (message.queryparam.g := "on"))</Condition>
            <Name>GError</Name>
        </Step>
    </Request>

3 个答案:

答案 0 :(得分:1)

我刚刚测试了你的条件并且它们正常工作。如果请求具有以下查询参数值:

g=ong=ON,GOn政策将会执行。

g=offg=OFF,GOff政策将会执行。

g={anythingelse},GError政策将会执行。

:=运算符是equals不区分大小写的运算符。你是如何确定条件不起作用的?使用您的示例,我将每个策略设置为具有不同故障响应有效负载的RaiseFault。这使我可以根据g的值验证执行了哪个策略。

答案 1 :(得分:1)

我同意Michael的看法,所示的代码是正确的。

考虑可能导致此代码无法按预期工作的可能问题:

  1. 确保GOn,GOff和GError政策中的名称正确无误。 (如果您正在脱机工作,则文件名与调用哪个策略无关。)例如,GOn策略的外部元素应该类似于

    &lt; AssignMessage name =“GOn”&gt;

  2. 如果GOn使用AssignMessage修改消息,您可能会在一个步骤中吹走g查询参数,以后的检查可能会失败。如果要修改消息,请在执行检查之前将message.queryparam.g存储到其他变量中。

  3. 我会使用trace toolPostman之类的工具来查看每个请求的内容。跟踪应告诉您已检查的变量及其值,您可能会看到出错的地方。

答案 2 :(得分:1)

如果你有多个条件检查,请尝试使用javascritp。在java脚本中检查各种条件并设置flag.And在基于flag值的流程中执行所需的策略。但是对于上面的实例,正如迈克尔指出的那样,条件应该按预期工作。