Mojolicious маршрут с параметром не совпадает, если параметр содержит% 2f - PullRequest
1 голос
/ 14 июня 2019

У меня есть следующий маршрут

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

Он работает хорошо почти каждый раз, но когда маршрут содержит последовательность символов% 2f, эквивалентную /, он работает так, как будто% 2f является разделителем пути вместоэкранированная последовательность.

Это пример ввода:

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

Это часть ошибки:

Ни один из этих маршрутов не может генерировать ответ на ваш запрос GET для / select_folder / [Gmail] / Destacados, может быть, вам нужно добавить новый?

Я хотел бы узнать, как получить такой параметр, как этот, в качестве части URL, без использования параметров GET или POST.

Ответы [ 2 ]

3 голосов
/ 14 июня 2019

Вы можете использовать подстановочные символы , чтобы / был частью соответствующего параметра.

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

Причина, по которой% 2F интерпретируется как /, заключается в том, что URL-адрес декодируется перед применением к маршрутизации.

1 голос
/ 14 июня 2019

Наконец я обнаружил, как использовать регулярные выражения для решения проблемы.

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

Я сделал: папка соответствует любому символу, теперь она работает.

...