0

私は次のものを持っています。パラメーター "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>
4

3 に答える 3

1

私はちょうどあなたの条件をテストし、それらは正しく動作します. リクエストに次のクエリ パラメータ値がある場合:

g=onまたはg=ON、GOn ポリシーが実行されます。

g=offまたはg=OFF、GOff ポリシーが実行されます。

g={anythingelse}、GError ポリシーが実行されます。

この:=演算子は、大文字と小文字を区別しない equals 演算子です。条件が機能していないとどのように判断していますか? あなたの例を使用して、各ポリシーを別の障害応答ペイロードを持つ RaiseFault にしました。これにより、 の値に応じて、どのポリシーが実行されたかを確認できましたg

于 2014-01-21T16:29:15.503 に答える
1

複数の条件付きチェックがある場合は、javascritp を使用してみてください。java スクリプトでさまざまな条件をチェックし、フラグを設定します。そして、フラグの値に基づいたフローで、必要なポリシーを実行します。しかし、上記のインスタンスでは、Michael が指摘したように、条件は期待どおりに動作するはずです。

于 2014-01-22T08:26:31.987 に答える
1

Michael に同意します。示されているコードは正しいです。

このコードが期待どおりに機能しない原因となる可能性のある問題について考えてみます。

  1. GOn、GOff、および GError ポリシー内の名前が正しいことを確認してください。(オフラインで作業している場合、ファイルの名前は呼び出されるポリシーとは関係ありません。) たとえば、GOn ポリシーの外側の要素は次のようになります。

    <AssignMessage name="GOn">

  2. GOn が AssignMessage を使用してメッセージを変更する場合、ステップ中に g クエリ パラメータを吹き飛ばし、その後のチェックが失敗する可能性があります。メッセージを変更する場合は、チェックを行う前に message.queryparam.g を別の変数に保存します。

  3. トレース ツールPostmanなどのツールを使用して、各リクエストで何が起こっているかを確認します。トレースは、チェックされた変数とその値を示しているはずであり、どこが間違っているかを確認できる場合があります。

于 2014-01-21T16:51:36.050 に答える