3

我正在尝试从 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 方法之后。有什么想法吗?

编辑:

此外,自从我发布此内容后,我尝试使用无解析选项创建 URI。我也尝试过这样的事情:

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

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

它总是解析出根部分(“/../”)。

4

3 回答 3

10

尝试转义 .. 用类似的东西:

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

根据我在这个讨论中找到的这个博客,这是有效的。

于 2009-02-06T16:40:58.870 回答
3

不太确定,但这可能是出于安全原因,因为允许“/../” URI 可能会让人们在任何服务器的文件系统上自由导航。

此外,官方URI RFC指出,在解析 URI 时,执行的步骤之一实际上是删除“/../”段,因此这在 C# 库中不是问题,而是常规的 URI 行为。

于 2009-02-06T16:43:32.313 回答
-1

您是否尝试过像这样使用 @ 符号?

Uri target = new Uri(@"ftp://ftpserver.com/../AB00000/incoming/files");
FtpWebRequest request = (FtpWebRequest)WebReqeuest.Create(target);
于 2009-01-26T18:02:51.697 回答