C#FTP 550错误

时间:2010-12-16 18:45:23

标签: c# ftp

我正在尝试以编程方式通过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对象上的属性吗?任何帮助将不胜感激。

6 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:4)

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

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

这对我有用。

答案 2 :(得分:1)

这是我使用的,我敢打赌.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();

答案 3 :(得分:1)

您尚未设置Method

 request.Method = WebRequestMethods.Ftp.DownloadFile;

答案 4 :(得分:1)

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

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

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

答案 5 :(得分:0)

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