Why queryparams are duplicated?

First: Apiproxy doesn't receive any queryparams.

Then create a request in preFlow for the Target

Adding an AssignMessage policy called "new-queryParams" inside Flow (target)

<AssignMessage name='new-queryParams'>
  <Add> 
    <Headers/> 
    <QueryParams> 
      <QueryParam name="val">{inputs.val}</QueryParam> 
      <QueryParam name="utcTimeStamp">{inputs.utcTimestamp}</QueryParam> 
      <QueryParam name="signature">{inputs.signature}</QueryParam> 
      <QueryParam name="locale">{inputs.locale}</QueryParam> 
    </QueryParams> 
  </Add>
  <AssignTo createNew='false' transport='http' type='request'></AssignTo>
</AssignMessage>

And then another AssignMessage that looks like this:

<AssignMessage name='set-payload'>
  <Set> 
    <Verb>POST</Verb> 
    <Payload contentType="application/json" variablePrefix="#" variableSuffix="$">#inputs.orders$</Payload> 
    <Path>TakeOrder</Path> 
  </Set>
  <AssignTo createNew='false' transport='http' type='request'></AssignTo>
</AssignMessage>

TargetX

https://bla.xyzi/{request.uri}

but looking the trace, i can see the following:

<Get value="/api/iwsapi/TakeOrder?val=b81e&utcTimeStamp=2015-08-19T18%3A29%3A11Z&signature=167a9a1ab&locale=en&val=b81e&utcTimeStamp=2015-08-19T18%3A29%3A11Z&signature=167a9a1ab&locale=en" name="request.uri"/>

Why are the parameters duplicated?

Solved Solved
0 3 403
1 ACCEPTED SOLUTION

Not applicable

I presume the incoming request has the same query params - out of the box Edge will propagate those to the target so if that were the case your assignMessage policy is essentially adding a second copy of each to the request.

Perhaps you can attach a copy of a simplified version of your bundle - with just the flow that is being executed so we can look at the full set of policies being executed.

View solution in original post

3 REPLIES 3

Not applicable

Can you share some of your policy config - specifically where you are adding params?

PreFlow

Assign Message

<Add> <Headers/> <QueryParams> <QueryParam name="val">{inputs.val}</QueryParam> <QueryParam name="utcTimeStamp">{inputs.utcTimestamp}</QueryParam> <QueryParam name="signature">{inputs.signature}</QueryParam> <QueryParam name="locale">{inputs.locale}</QueryParam> </QueryParams> </Add>

create false type=request

Flow X

Assign Message

create false type=request

<Set> <Headers/> <QueryParams/> <FormParams/> <Verb>POST</Verb> <Payload contentType="application/json" variablePrefix="#" variableSuffix="$">#inputs.orders<;/Payload> <Path>TakeOrder</Path> </Set>

TargetX

https://bla.xyzi/{request.uri}

Not applicable

I presume the incoming request has the same query params - out of the box Edge will propagate those to the target so if that were the case your assignMessage policy is essentially adding a second copy of each to the request.

Perhaps you can attach a copy of a simplified version of your bundle - with just the flow that is being executed so we can look at the full set of policies being executed.