mojolicious禁用点占位符路由

Ili*_*zis 3 perl mojolicious

背景

我有这个路由

my $foo = $r->get('/foo/:asd')->to('Foo#bar');

在控制器中我只是用传递的param渲染一些json(借助于Mojolicious::Controller::REST)

$self->data( 'param' => $self->param('asd') );


问题

发送请求时/foo/bar,其按预期工作:

{"data":{"param":"bar"}}

但是当我试图传递一个包含a的字符串,dot例如一封电子邮件(email@email.com)时,mojo正在渲染dot为a slash.我在第一时间定义的路由不再相关,因为现在模式已更改为foo/:bar/:baz


解决方案

我被告知解决方案就在这里:https : //github.com/kraih/mojo/blob/master/t/mojolicious/routes.t#L218
这是有道理的,但我不明白如何将其与我有.

我试图添加$foo->pattern->placeholder_start('+');到我的路由,但仍然,模式正在改变,它再次无关紧要.看起来它不会禁用与我的问题相关的点.

我尝试在$r变量上实现模式方法(这是Mojo的路由 - $self->routes)

最重要的是,我只需要为某些路由禁用点占位符或完全禁用.

谢谢

mob*_*mob 7

Mojolicious支持三种占位符参数:

标准

my $foo = $r->get('/foo/:asd')->to('Foo#bar');
Run Code Online (Sandbox Code Playgroud)

轻松

my $foo = $r->get('/foo/#asd')->to('Foo#bar');
Run Code Online (Sandbox Code Playgroud)

通配符

my $foo = $r->get('/foo/*asd')->to('Foo#bar');
Run Code Online (Sandbox Code Playgroud)

标准占位符可以匹配除.和之外的所有字符/.轻松的占位符可以匹配除了之外的所有字符/.通配符占位符可以匹配所有字符.因此,如果要使用.或支持参数值/,则必须使用宽松或通配符样式占位符.