我必须列出FTP目录../Catalogue/
。
它在.NET 4.0中运行,但不再适用于.NET 4.5.2。
正如我所看到的,在.NET 4.5.2中,URI正在发生变化。 ../
已被删除。
有没有人知道,如何将../
保留在我的请求或替代解决方案中。
Dim request As FtpWebRequest =
DirectCast(WebRequest.Create(
New Uri("ftp://" + FTPServer + "/%2E%2E/Catalogue/")), FtpWebRequest)
request.Proxy = Nothing
request.UsePassive = True
request.UseBinary = True
request.KeepAlive = False
request.Credentials = New NetworkCredential("", "")
request.Method = WebRequestMethods.Ftp.ListDirectoryDetails
Dim response As WebResponse = request.GetResponse()
答案 0 :(得分:0)
ftp://www.example.com/../Catalogue
不是有效的网址,即imo。虽然它可能在过去的.NET版本中有效,但它不再令人惊讶。
您不应在网址中使用..
。如果,它必须在一些实际路径之后,那么你可以随时随地返回。您的URL实际上看起来像是在尝试超越FTP根目录。那是不可能的。
但是从你模糊的评论中可以清楚地看出,你实际上是想从主路走上去(非chrooted)。
只需使用实际路径:ftp://www.example.com/something/Catalogue
,其中something
是您在屏幕截图中屏蔽的路径。
如果something
由于某种原因而发生变化,您可以使用PrintWorkingDirectory
方法找出它:
Dim pwdRequest As FtpWebRequest =
DirectCast(WebRequest.Create(
New Uri("ftp://" + FTPServer + "/")), FtpWebRequest)
pwdRequest.Method = WebRequestMethods.Ftp.PrintWorkingDirectory
Dim response As FtpWebResponse = pwdRequest.GetResponse()
Dim path As String = response.StatusDescription
Dim i As Integer = path.IndexOf("""")
If i > 0 Then
path = path.Substring(i + 1)
i = path.IndexOf("""")
If i > 0 Then
path = path.Substring(0, i)
Dim request As FtpWebRequest =
DirectCast(WebRequest.Create(
New Uri("ftp://" + FTPServer + path + "../")), FtpWebRequest)
' Your code here
End If
End If