2

通配符占位符 (*) 据说完全匹配所有内容。但我怕它不...

我有一个使用以下方法的网络服务:

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);
}
4

3 回答 3

2

?page= 它不是 url。

它的参数。

所以这里没有任何错误。您在 $param 中有“搜索”。并且 $page=1 在存储中。

于 2011-11-29T13:33:31.100 回答
1

我认为Korjavin是对的,这是预期的行为。看起来像“page=1”作为参数,应该在 $stash->param('page') 中。请参阅::Lite 中的 GET-POST 参数

如果它不起作用,也许将“param”占位符重命名为其他有帮助?也许这是一个名字冲突。

于 2011-11-29T14:28:20.117 回答
1

请求参数不会在存储中。

他们在

$self->req->参数

所以

    my $params = $self->req->params->to_hash;
    $self->app->log->debug(Dumper $params);

应该让你看到你所追求的信息

于 2011-11-29T14:32:09.827 回答