据说通配符占位符(*)绝对匹配所有内容。 但我担心它不会......
我有一个使用以下方法的网络服务:
get '/*param' => sub {
my $self = shift;
my $param = $self->stash('param');
$self->app->log->debug($param);
}
当我用http://localhost:3000/search查询我的服务时 然后该方法记录“搜索”,这是好的 但 当我用http://localhost:3000/search?page=1查询我的服务时 然后该方法还记录“搜索”,这是不正确的IMO
我也试过替换
get '/*param' => sub {
与
get '/:param' => [param => qr/.*/] => sub {
但结果是一样的。
有人知道解决这个问题吗? 或者我应该将其作为错误提交?
此致 洛伦佐
更新 对于有相同问题的人,我已经解决了这个问题:
get '/*path' => sub {
my $self = shift;
my $path = $self->stash('path');
my @params = $self->param;
if (scalar @params > 0) {
$path .= '?';
foreach my $param (@params) {
$path .= $param . '=' . $self->param($param) . '&';
}
$path = substr($path, 0, length($path) - 1);
}
$self->app->log->debug($path);
}
答案 0 :(得分:2)
?page =它不是网址。
它的参数。
所以这里没有任何错误。 你在$ param中'搜索'了。 并且页面中的$ page = 1。
答案 1 :(得分:1)
我认为Korjavin是正确的,这是预期的行为。看起来像“page = 1”作为参数,应该在$ stash-> param('page')中。见GET-POST-parameters in ::Lite
如果它不起作用,可能将“param”占位符重命名为其他东西有帮助吗?也许这是一个名字冲突。
答案 2 :(得分:1)
请求参数不在存储中。
他们在
$自> req-> PARAMS
所以
my $params = $self->req->params->to_hash;
$self->app->log->debug(Dumper $params);
应该允许您查看您之后的信息