Я новичок в фреймворке Dancer и веб-приложениях в целом. У меня есть проект Dancer, в котором есть маршрут, который принимает несколько параметров. Пока что без пота. Однако, если в качестве значения одного из параметров указан путь к файлу, маршрут не будет найден.
Я попытался закодировать строку параметра следующим образом, чтобы исключить косую черту:
$paramString =~ s/\//%2F/g;
и это действительно кодирует косые черты, как и ожидалось (я распечатываю это в журнале, чтобы убедиться).
Однако после добавления строки параметра к базовому URI для интересующего меня маршрута URI отображается в браузере в незакодированном виде, возникает ошибка 404, а в журнале говорится, что незакодированный маршрут не может быть найден .
Я заглянул в модуль Request.pm и обнаружил, что в методе init вызывается приватный метод _url_decode, который удаляет кодировку. Есть ли способ отключить это, когда это не желательно?
Я также пытался использовать метод uri_for для создания URI. В этом случае закодированный URI отображается в браузере, однако маршрут по-прежнему не найден, и в журнале указано, что для поиска маршрута используется незакодированная форма (с косой чертой).
Trying to match 'GET /exome_proj_config/project_type=exome&project_root=/usr/local/projects/users/pdagosto/projects&analysis_project_name=Test' against /^\/exome_proj_config\/([^\/]+)$/ (generated from '/exome_proj_config/:project_type:project_root:analysis_project_name') in /home/pdagosto/perl5/lib/perl5/Dancer/Route.pm l. 84 here
Поскольку регулярное выражение, используемое для сопоставления, явно ищет строку без косой черты после строки в конце базового URI, ясно, что маршрут никогда не будет найден.
Есть ли способ получить параметр URI, содержащий путь, или нужно использовать какой-то другой подход?