2009-01-26 32 views
3

我想從ftp web服務器上自動執行一些上傳/下載任務。當我通過客戶端連接到服務器,或者通過火狐甚至,爲了讓我的目錄,我必須指定這樣的路徑:爲什麼FTPWebRequest或WebRequest通常不接受/../路徑?

ftp://ftpserver.com/../AB00000/incoming/files 

如果我嘗試訪問此:

ftp://ftpserver.com/AB00000/incoming/files 

服務器拋出目錄不存在的錯誤。因此,這個問題:

我試圖與第一個FTP地址創建的FtpWebRequest,但它總是解析了「/../」部分,然後我的服務器表示,路徑不存在。

我已經試過這些:

Uri target = new Uri("ftp://ftpserver.com/../AB00000/incoming/files"); 
FtpWebRequest request = (FtpWebRequest)WebReqeuest.Create(target); 

string target = "ftp://ftpserver.com/../AB00000/incoming/files"; 
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(target); 

在第一位,路徑已經是不正確時,Uri對象實例化時,在第二位,它的後WebRequest.Create方法。任何想法發生了什麼?

編輯:

此外,由於我貼這個,我曾嘗試與沒有解析選項創建URI。我也嘗試過這樣的事情:

string ftpserver = "ftp://ftpserver.com/../"; 
string path = "12345/01/01/file.toupload"; 

Uri = new Uri(ftpserver, path, true); 

,它始終解析出根部分(「/../」)。

回答

10

嘗試逃避..喜歡的東西:

Uri target = new Uri("ftp://ftpserver.com/%2E%2E/AB00000/incoming/files"); 

根據本blog我在這個discussion發現工作。

-1

你試過用@符號嗎?

Uri target = new Uri(@"ftp://ftpserver.com/../AB00000/incoming/files"); 
FtpWebRequest request = (FtpWebRequest)WebReqeuest.Create(target); 
+0

試過了,它做了同樣的事情。 – scottm 2009-01-26 18:21:07

+2

該字符串中的任何字符都不能混淆爲轉義字符,因此使其成爲垂直字符串不會產生任何影響。 – 2009-02-06 16:33:01

3

不太確定,但可能出於安全原因,因爲允許「/../」URI可能讓用戶在任何服務器的文件系統上自由導航。

此外,官方URI RFC指出,解析URI時,執行的步驟之一實際上是刪除「/../」段,因此它不是C#庫中的問題,但它是常規的URI行爲。

相關問題