【问题标题】:Mojolicious route with a parameter not matching if the parameter contains %2f如果参数包含 %2f,则参数不匹配的 Mojolicious 路由
【发布时间】:2019-06-14 08:19:00
【问题描述】:

我有以下路线

  $r->get('/select_folder/:mail')->to('mail#change_folder');

它几乎每次都能正常工作,但是当路由包含 %2f 字符序列时,相当于 / 它就像 %2f 是路径分隔符而不是转义序列一样工作。

这是一个示例输入:

http://127.0.0.1:5000/select_folder/%5bGmail%5d%2fDestacados

这是错误的一部分:

这些路由都不能为您对 /select_folder/[Gmail]/Destacados 的 GET 请求生成响应,也许您需要添加一个新路由?

我想知道一些方法可以在不使用 GET 或 POST 参数的情况下获取这样的参数作为 url 部分。

【问题讨论】:

标签: perl routes mojolicious


【解决方案1】:

您可以使用wildcard placeholders 允许/ 成为匹配参数的一部分。

  $r->get('/select_folder/*mail')->to('mail#change_folder');

%2F 被解释为/ 的原因是因为 URL 在应用于路由之前已被解码。

【讨论】:

    【解决方案2】:

    我终于发现了如何使用正则表达式来解决问题。

    $r->get('/select_folder/:folder'=>[folder=>qr/.*/])->to('mail#change_folder');
    

    我做了 :folder 匹配任何字符,现在它可以工作了。

    【讨论】:

      猜你喜欢
      • 2014-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多