一般来说,我是 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 参数包含路径或必须使用其他方法?