繁体   English   中英

C#FTP 550错误

[英]C# FTP 550 error

我正在尝试以编程方式通过FTP以C#方式下载文件,这里是相关代码(显然有假信用证和URI):

try
{
    var request = FtpWebRequest.Create("ftp://ftp.mydomain.com/folder/file.zip");
    request.Credentials = new NetworkCredential("username", "password");

    using (var response = request.GetResponse())
    {
         ...
    }
}
catch (WebException we)
{
    ...
}

request.GetResponse()处抛出异常,错误代码是550.问题不在于凭据或URI,因为它们在IE中工作正常并且文件在那里成功下载。 我错过了什么? 我应该使用其他类型的凭据对象吗? 我没有设置request对象上的属性吗? 任何帮助,将不胜感激。

原来FTP根目录不一定与URL根目录相同。 也许我混淆了术语,所以让我解释一下:在我的情况下,连接到ftp.mydomain.com已经从/文件夹开始,所以我的URL只需要ftp://ftp.mydomain.com/file.zip IE8知道如何消除原始路径中的冗余/文件夹部分,而FtpRequest类没有,这就是为什么它在IE8中工作但在C#代码中没有。

在本地路径部分的开头添加另一个斜杠(在hostname:port之后):

var request = FtpWebRequest.Create("ftp://ftp.mydomain.com//folder/file.zip");

这对我有用。

与我的FTP服务器的连接显示不同的行为,具体取决于我尝试连接的位置。 在我的本地网络中,它只在域部分之后使用一个斜杠,例如ftp://test.test.com/folder/myfile.txt

但是在远程机器上我必须使用两个斜杠,如ftp://test.test.com//folder/myfile.txt

两种情况都采用双斜线方法。

这是我使用的,我打赌.Method是你缺少的主要东西

        request = (FtpWebRequest)FtpWebRequest.Create(address);
        request.Credentials = new NetworkCredential("username", "password");
        request.UsePassive = true;
        request.UseBinary = true;
        request.Proxy = null;

        request.Method = WebRequestMethods.Ftp.DownloadFile;
        FtpWebResponse dataResponce = (FtpWebResponse)request.GetResponse();

您尚未设置Method

 request.Method = WebRequestMethods.Ftp.DownloadFile;

我最近遇到了这个问题,经过多次测试后发现,这里和那里之间的某个模块不喜欢混合大小写的URI,因此我的决议是在URI上使用.ToLower()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM