是否可以在ColdFusion MX 7中保留HTTP GET请求的大小写?

时间:2011-07-25 09:45:00

标签: http coldfusion coldfusion-7

是否可以在ColdFusion MX 7中保留GET字段名称的大小写(案例保留在CF9中)?我不知疲倦地搜索了答案,但所有解决方案似乎都是POST特定的,而这是一个GET。

N.B。我知道RFC2616声明HTTP字段名称不区分大小写,但我们都知道规范可以如何简单地偏离...

示例:

鉴于以下ColdFusion脚本(我们称之为' url-case-test.cfm '):

<html>
    <body>
        <cfoutput>
            #structKeyList(url)#
        </cfoutput>
    </body>
</html>

使用以下参数修饰的URL导航到此脚本:

http://localhost:8080/cfusion/url-case-test.cfm?name1=value1&name2=value2&name3=value3

我得到了输出:

NAME1,NAME2,NAME3

有关我如何保留案件的任何建议?非常感谢帮助。

5 个答案:

答案 0 :(得分:8)

另一种选择是使用getParameterMap(),它返回区分大小写的参数结构。

<cfset map = getPageContext().getRequest().getParameterMap()>
<cfoutput>#structKeyList(map)#</cfoutput>

答案 1 :(得分:5)

我认为你唯一能做的就是解析CGI.QUERY_STRING值。

<cfset paramList="" />
<cfloop list="#CGI.QUERY_STRING#" index="qsparam" delimiters="&">
  <cfset paramList=listAppend(paramList,listFirst(qsparam,"=")) />
</cfloop>
<cfoutput>#paramList#</cfoutput>

不要将URL参数存储在结构中作为键,否则您将再次丢失案例。

这显然不太理想,因为您通过cfparam或cfset(或任何其他方式操作URL对象)设置的任何URL值都将丢失。

答案 2 :(得分:3)

您使用的是哪个版本的CF?在ACF9和Railo 3.3案件中肯定会保留。

为了测试目的,我对您的示例网址进行了一些更改:

?nAmE1=ValuE1&name2=value2&name3=value3

代码:

<cfdump var="#url#" />

<cfloop collection="#url#" item="key">
    <cfoutput>#key#<br/></cfoutput>
</cfloop>

<cfoutput>#structKeyList(url)#</cfoutput>

ACF9:

enter image description here

Railo:

enter image description here

答案 3 :(得分:0)

据我所知,这是不可能的。 Coldfusion总是大写结构键名。如果具有有限的URL密钥列表,则只需创建逗号分隔的新密钥列表并作为单独的URL密钥传递。这就是我以前用过的。

答案 4 :(得分:0)

如果你想维护大小写,你只需使用数组表示法在循环中构建结构。

<cfset paramStruct = StructNew()>
<cfloop list = "#CGI.QUERY_STRING#" index="i" delimiters="&">
  <cfset paramStruct[ listFirst(i,"=") ] = listLast(i,"=")>
</cfloop>

<cfdump var="#paramStruct#">

我没有对此进行测试,但我认为它会起作用。