2009-01-26 47 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行为。

相关问题