我正在尝试从ftp Web服务器自动执行一些上传/下载任务。当我通过客户端或通过Firefox连接到服务器时,为了进入我的目录,我必须指定这样的路径:
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方法之后。有什么想法正在发生什么?
编辑:
此外,由于我发布了这个,我尝试使用no parse选项创建URI。我也试过这样的事情:
string ftpserver = "ftp://ftpserver.com/../";
string path = "12345/01/01/file.toupload";
Uri = new Uri(ftpserver, path, true);
它总是解析根部分(“/../").
答案 0 :(得分:10)
尝试使用以下内容转义..
Uri target = new Uri("ftp://ftpserver.com/%2E%2E/AB00000/incoming/files");
根据我在blog中找到的discussion。
答案 1 :(得分:3)
不太确定,但可能出于安全原因,因为允许“/../”URI可能会让人们在任何服务器的文件系统上自由导航。
此外,官方URI RFC指出,在解析URI时,执行的步骤之一实际上是删除“/../”段,因此它不是C#库中的问题,而是常规URI行为。
答案 2 :(得分:-1)
您是否尝试使用@符号?
Uri target = new Uri(@"ftp://ftpserver.com/../AB00000/incoming/files");
FtpWebRequest request = (FtpWebRequest)WebReqeuest.Create(target);