C# 为什么';t FTPWebRequest或WebRequest通常接受/路径?
我正在尝试从ftp web服务器自动执行一些上载/下载任务。当我通过客户端或Firefox连接到服务器时,为了访问我的目录,我必须指定如下路径:C# 为什么';t FTPWebRequest或WebRequest通常接受/路径?,c#,ftpwebrequest,C#,Ftpwebrequest,我正在尝试从ftp web服务器自动执行一些上载/下载任务。当我通过客户端或Firefox连接到服务器时,为了访问我的目录,我必须指定如下路径: ftp://ftpserver.com/../AB00000/incoming/files string ftpserver = "ftp://ftpserver.com/../"; string path = "12345/01/01/file.toupload"; Uri = new Uri(ftpserver, path, true); 如
ftp://ftpserver.com/../AB00000/incoming/files
string ftpserver = "ftp://ftpserver.com/../";
string path = "12345/01/01/file.toupload";
Uri = new Uri(ftpserver, path, true);
如果我尝试访问此项:
ftp://ftpserver.com/AB00000/incoming/files
服务器抛出目录不存在的错误。因此,问题是:
我试图用第一个ftp地址创建一个FTPWebRequest,但它总是解析出“/../”部分,然后我的服务器说路径不存在
我试过这些:
Uri target = new Uri("ftp://ftpserver.com/../AB00000/incoming/files");
FtpWebRequest request = (FtpWebRequest)WebReqeuest.Create(target);
及
在第一位中,当Uri对象被实例化时,路径已经不正确,在第二位中,它位于WebRequest.Create方法之后。知道发生了什么事吗
编辑:
此外,自从我发布了这篇文章之后,我已经尝试使用no-parse选项创建URI。我也试过这样的方法:
ftp://ftpserver.com/../AB00000/incoming/files
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/../AB00000/incoming/files");
FtpWebRequest request = (FtpWebRequest)WebReqeuest.Create(target);
试着逃离。。比如:
Uri target = new Uri("ftp://ftpserver.com/%2E%2E/AB00000/incoming/files");
这就是我在本文中发现的原理。不是很确定,但可能是出于安全原因,因为允许“/../”URI可能会让人们在任何服务器的文件系统上自由导航
此外,该官员表示,解析URI时,执行的步骤之一实际上是删除“/../”段,因此这在C#library中不是问题,而是常规URI行为 试过之后,它也会做同样的事情。该字符串中的任何字符都不会与转义字符混淆,因此将其设置为vertbatim字符串不会有任何效果。就是这样。哇!服务器允许每个用户访问ftpusers/user文件夹,我必须以可以访问所有其他用户文件夹的帐户登录,这就是为什么必须包含/。。这对您仍然有效吗?根据上面的参考,在指定ftp url时,uri类不应压缩url。例如,以下ftp url:Uri Uri=new Uri(“);Console.WriteLine(Uri.AbsoluteUri);Console.WriteLine(Uri.PathAndQuery);应导致:AbsoluteUri:“PathAndQuery:/%2E%2E/%2E%2E%2E”,但我看到的不是预期的:AbsoluteUri:“PathAndQuery:/”