如何在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是不可能的:)我尝试了,但在策略中不起作用;)据我所知,这是行不通的。