Perl的::舞者如何将作为URI参数的文件路径(Perl::Dancer how to inclu

2019-10-18 08:48发布

我是新来的,一般舞者框架和Web应用程序。 我有,我有一个接受多个参数路线的舞者项目。 到目前为止,无汗。 然而,如果一个参数有那么路径未找到文件路径为它的价值。

我曾尝试编码参数字符串如下消除斜线:

$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参数?

Answer 1:

它可能有一个URI与提供的参数是查询字符串,而不是路径的一部分参数文件路径或斜线。 (见http://en.wikipedia.org/wiki/Uniform_resource_locator 。)

例如看见这个舞女脚本:

use strict;
use warnings;
use Dancer;

get '/file/action/:action' => sub {
    my $filename = param('filename');
    my $action = param('action');
    return "Filename is $filename and action is $action";
};

dance;

如果你把这个字符串到浏览器

http://localhost:3000/file/action/delete?filename=/folder/filename.txt

那么你应该会看到以下内容:

Filename is /folder/filename.txt and action is delete

在你的问题告诉你的URL使用&字符分开的参数,但它看起来像你需要一个? 字符首先从路径查询字符串分隔。 它是从你的问题不清楚你是如何创建您的要求 - 但前提是你可以把文件名中的URL的查询字符串部分,那么上面的方法应该工作。



文章来源: Perl::Dancer how to include a file path as a parameter in the URI