如何在apigee中收集多值queryparam的值?

如何在apigee中收集多值queryparam的值?,apigee,Apigee,对于具有多值查询参数的请求,如:https://test.apigee.net?storeIds=abc&storeIds=xyz,如何设置提取变量策略,以便有一个storeIds数组,如:storeIds=[“abc”,“xyz”] 更新#1: 在Apigee的javascript中使用以下内容: var arrayOfStoreIds = []; for (i = 0; i < context.proxyRequest.queryParams['storeIds'].length; i

对于具有多值查询参数的请求,如:
https://test.apigee.net?storeIds=abc&storeIds=xyz
,如何设置提取变量策略,以便有一个storeIds数组,如:
storeIds=[“abc”,“xyz”]

更新#1: 在Apigee的javascript中使用以下内容:

var arrayOfStoreIds = [];
for (i = 0; i < context.proxyRequest.queryParams['storeIds'].length; i++) { 
  arrayOfStoreIds.push(context.proxyRequest.queryParams['storeIds'][i]);
}
线#参考点指向
for
循环的第一行

更新#2:

  • 以下位置的文档不正确:
    • context.proxyRequest.queryParams['city'].length;//=2
  • 正确语法在
    • context.proxyRequest.queryParams['city'].length();//=2
因此,使用这个
context.proxyRequest.queryParams['storeIds'].length()
就可以了!至少在javascript中。。。我仍然不知道如何通过提取变量策略来实现这一点…

说实话。但是,您可以清楚地看到,在尝试检索它们时存在一个问题;在php中使用
$\u GET
,在JavaScript、Node.js等中,您会遇到这种情况

如果可以,我建议您使用管道或逗号分隔:
storeIds=abc,xyz
。然后,要使用ExtractVariables策略提取查询参数,可以执行以下操作:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<ExtractVariables async="false" continueOnError="true" enabled="true" name="productsVariables">
    <DisplayName>Extract</DisplayName>
    <URIPath>
    <QueryParam name="storeIds">
        <Pattern ignoreCase="true">{storeIdsArray}</Pattern>
    </QueryParam>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>
  var text = "";
  var myQueryParams =  context.getVariable('message.querystring');
  var myQueryParamArray = myQueryParams.split(/\&/);
    for (i = 0; i < myQueryParamArray.length; i++) { 
      var myvals = myQueryParamArray[i].split(/\=/);
      text += myvals[1] + ", ";
    }
    context.setVariable('mytext', text);

在原始CGI中,您可以使用NULL上的相同queryparam拆分多个值,但在Apigee中,当它到达消息处理器时,queryparam只包含第一个值。因此,唯一的方法是使用完整的message.querystring使用暴力

如果我发送:

testme?myQueryParam=Y&myQueryParam=X
我必须使用JavaScript进行双重拆分,并通过每个queryparam循环执行以下操作:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<ExtractVariables async="false" continueOnError="true" enabled="true" name="productsVariables">
    <DisplayName>Extract</DisplayName>
    <URIPath>
    <QueryParam name="storeIds">
        <Pattern ignoreCase="true">{storeIdsArray}</Pattern>
    </QueryParam>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>
  var text = "";
  var myQueryParams =  context.getVariable('message.querystring');
  var myQueryParamArray = myQueryParams.split(/\&/);
    for (i = 0; i < myQueryParamArray.length; i++) { 
      var myvals = myQueryParamArray[i].split(/\=/);
      text += myvals[1] + ", ";
    }
    context.setVariable('mytext', text);
var text=”“;
var myQueryParams=context.getVariable('message.querystring');
var myqueryparamary=myQueryParams.split(/\&/);
对于(i=0;i

在本例中,我创建了一个名为mytext的变量,其值为“X,Y”

我喜欢它!但javasrcipt再次介入。我想再等一段时间,等待apigee的人告诉我,在接受您的答案之前,通过xml/policy是不可能的:)我尝试了,但在策略中不起作用;)据我所知,这是行不通的。