我想在.net中轻松实现一些目标。
我想要做的是传递多个相同名称的URL参数,以构建这些值的数组。
换句话说,我想采用这样的URL字符串:
http://www.example.com/Test.cfc?method=myArrayTest&foo=1&foo=2&foo=3
从URL参数“foo”构建一个数组。
在.net / C#中,我可以这样做:
[WebMethod]
myArrayTest(string[] foo)
这将从变量“foo”构建一个字符串数组。
到目前为止我所做的是这样的:
<cffunction name="myArrayTest" access="remote" returntype="string">
<cfargument name="foo" type="string" required="yes">
这将输出:
1,2,3
我对此并不感到激动,因为它只是一个逗号分隔的字符串,我担心URL中可能会有逗号(当然是编码的),然后如果我尝试循环逗号,可能会被误解作为一个单独的参数。
所以,我很难理解如何实现这一目标。
任何想法??
提前致谢!!
答案 0 :(得分:3)
编辑: Sergii的方法更通用。但是,如果要解析当前URL,并且不需要修改生成的数组,则另一个选项是使用getPageContext()从基础请求中提取参数。请注意下面提到的两个怪癖。
<!--- note: duplicate forces the map to be case-INsensitive --->
<cfset params = duplicate(getPageContext().getRequest().getParameterMap())>
<cfset quasiArray = []>
<cfif structKeyExists(params, "foo")>
<!--- note: this is not a *true* CF array --->
<!--- you can do most things with it, but you cannot append data to it --->
<cfset quasiArray = params["foo"]>
</cfif>
<cfdump var="#quasiArray#">
答案 1 :(得分:2)
好吧,如果您对解析网址没问题,那么遵循“原始”方法可能对您有用:
<cffunction name="myArrayTest" access="remote" output="false">
<cfset var local = {} />
<!--- parse raw query --->
<cfset local.args = ListToArray(cgi.QUERY_STRING, "&") />
<!--- grab only foo's values --->
<cfset local.foo = [] />
<cfloop array="#local.args#" index="local.a">
<cfif Left(local.a, 3) EQ "foo">
<cfset ArrayAppend(local.foo, ListLast(local.a, "=")) />
</cfif>
</cfloop>
<cfreturn SerializeJSON(local.foo) />
</cffunction>
我已使用此查询对其进行了测试:?method=myArrayTest&foo=1&foo=2&foo=3,3
,看起来按预期工作。
奖金。 Railo的最佳提示:如果您按如下方式格式化查询,则此数组将在URL范围?method=myArrayTest&foo[]=1&foo[]=2&foo[]=3,3
中自动创建。
答案 2 :(得分:0)
listToArray( arguments.foo )
应该会给你你想要的东西。