我正在尝试从 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);

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

有帮助吗?

解决方案

尝试逃离..类似的东西:

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

按照这个工作 博客 我在这个中找到了 讨论.

其他提示

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

另外,官方 URI RFC 指出解决的一个URI之一,当执行的步骤,实际上是除去“/../”段的,所以它不是在C#库中的问题,但它是常规的URI行为。

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

Uri target = new Uri(@"ftp://ftpserver.com/../AB00000/incoming/files");
FtpWebRequest request = (FtpWebRequest)WebReqeuest.Create(target);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top