Можно ли сохранить случай запроса HTTP GET в ColdFusion MX 7? - PullRequest
0 голосов
/ 25 июля 2011

Можно ли сохранить регистр имен полей GET в ColdFusion MX 7 (регистр сохраняется в CF9)?Я неутомимо искал ответ, но все решения кажутся специфичными для POST, тогда как это GET.

Примечание: я знаю, что 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 ]

8 голосов
/ 25 июля 2011

Другой вариант - использование getParameterMap (), который возвращает чувствительную к регистру структуру параметров.

<cfset map = getPageContext().getRequest().getParameterMap()>
<cfoutput>#structKeyList(map)#</cfoutput>
5 голосов
/ 25 июля 2011

Я думаю, что единственное, что вы сможете сделать, - это проанализировать значение CGI.QUERY_STRING.

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

Не сохраняйте параметры URL в структуре как ключи, иливы снова потеряете ваше дело.

Это, очевидно, не идеально, так как любые значения URL, которые вы установили через cfparam или cfset (или любые другие способы манипулирования объектом URL), будут потеряны.

3 голосов
/ 25 июля 2011

Какую версию CF вы используете?В ACF9 и Railo 3.3 дело определенно сохраняется.

Я немного изменил ваш пример URL для тестирования:

?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

Рейло:

enter image description here

0 голосов
/ 07 августа 2013

Если вы хотите сохранить регистр, вы просто используете нотацию массива для построения структуры в вашем цикле.

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

<cfdump var="#paramStruct#">

Я не проверял это, но я предполагаю, что это будет работать.

0 голосов
/ 25 июля 2011

Насколько мне известно, это невозможно.Coldfusion всегда Капитализировать ключевое имя структуры.Если у вас ограниченный список ключей URL, просто создайте разделенный запятыми новый список ключей и передайте его в качестве отдельного ключа URL.Это то, что я использовал раньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...