【问题标题】:How to handle Apigee error case when query parameter checking in proxy在代理中查询参数检查时如何处理 Apigee 错误情况
【发布时间】:2014-01-22 16:26:31
【问题描述】:

我有以下。参数“g”允许为“on”或“off”,否则进入错误策略。但是,从不调用异常情况。相反,如果不是“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>

【问题讨论】:

    标签: apigee


    【解决方案1】:

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

    g=on 或 g=ON,将执行 GOn 策略。

    g=off 或g=OFF,将执行 GOff 策略。

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

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

    【讨论】:

    • 感谢您提及 RaiseFault。我的错误是我没有使用 RaiseFault。相反,我使用了AssignMessage,它继续指向目标。我假设当我设置 StatusCode、ReasonPhrase 和 Payload 时,这些都被忽略了,因为使用了目标。
    【解决方案2】:

    我同意 Michael 的观点,显示的代码是正确的。

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

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

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

    3. 我会使用trace tool 和Postman 之类的工具来查看每个请求的情况。跟踪应该会告诉您已检查的变量及其值,您可能会看到哪里出错了。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-25
        • 2012-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多