我是新來的Dancer框架和一般的web應用程序。我有一個舞者項目,我有一個接受多個參數的路線。到目前爲止,沒有汗水。但是,如果其中一個參數具有文件路徑作爲其值,則找不到路由。Perl :: Dancer如何在URI中包含文件路徑作爲參數
我已經試過編碼參數字符串如下消除斜線:
$paramString =~ s/\//%2F/g;
,這確實編碼爲預期的(我把它打印出來的日誌中,以確保)的斜線。
但是,參數字符串附加到我感興趣的路由的基本URI後,URI以未編碼的形式顯示在瀏覽器中,引發了404錯誤,並且日誌表示未編碼的路由可以找不到。
我查看了Request.pm模塊,發現在init方法中調用了一個名爲_url_decode的私有方法,它將刪除編碼。有沒有辦法在不需要時禁用它?
我也嘗試使用uri_for方法來創建URI。在這種情況下,編碼URI並在瀏覽器中顯示出來,但是,路線仍然沒有找到和日誌指出未編碼的形式(使用正斜槓)被用於搜索路線
Trying to match 'GET /exome_proj_config/project_type=exome&project_root=/usr/local/projects/users/pdagosto/projects&analysis_project_name=Test' against /^\/exome_proj_config\/([^\/]+)$/ (generated from '/exome_proj_config/:project_type:project_root:analysis_project_name') in /home/pdagosto/perl5/lib/perl5/Dancer/Route.pm l. 84 here
由於用於匹配的正則表達式顯然在尋找一個沒有任何正斜槓的字符串,它跟在基URI末尾的正斜槓後面,因此很明顯路由永遠不會找到。
有沒有辦法讓URI參數包含一個路徑或者是否需要使用其他方法?
你想從服務器上下載文件嗎?在這種情況下,你真的想將服務器上的文件夾結構暴露給客戶端嗎?我知道這並不直接回答這個問題 - 但在REST服務設計方面,您在URI中包含文件路徑時感覺不對。你的客戶端可以開機並將文件路徑放在主體中? –
不,它不涉及文件下載,REST服務或任何這樣的廢話。我不在尋找關於設計的評論,應用程序的性質將花費太長時間來解釋,並且與問題相關。只需說這是一個完全內部的應用程序,而不是一個網站,僅僅是一個內部應用程序的GUI。我正在尋找的只是一個簡單的答案,它是否可能具有帶正斜槓的值的URL參數,以及如何執行此操作。這就是我感興趣的全部。 – roadrider
我很抱歉跳到結論。我已經發布了一個解決方案,應該可以工作,我希望。 –