7

我正在使用以下方法列出文件夹的内容:

private void TestFtp()
{
    try
    {
        // List all of the files from FTP
        FtpWebRequest ftprequest = (FtpWebRequest)WebRequest.Create(new Uri("ftp://m3database/recover/"));

        ftprequest.Credentials = new NetworkCredential("myusername1", "********");

        ftprequest.Method = WebRequestMethods.Ftp.ListDirectory;
        ftprequest.UsePassive = false;
        ftprequest.Proxy = null;            

        using (var resp = ftprequest.GetResponse())
        {
            StreamReader reader = new StreamReader(resp.GetResponseStream());

            MessageBox.Show(reader.ReadToEnd());
        }
    }
    catch (Exception e)
    {
        MessageBox.Show(e.Message);
    }
}

我正在通过 FTP 连接到单个 Linux 服务器。我正在使用凭据进行myusername1连接myusername2

如果我使用myusername1凭据,我可以在使用此功能时列出目录内容,但是如果我使用myusername2它会出现以下错误:

远程服务器返回错误:(503) 错误的命令序列。

我尝试过的事情:

  1. 我试过设置ftprequest.KeepAlive = false
  2. 我尝试使用 UsePassive、Proxy 等的所有排列。
  3. 我可以使用启用了安全 FTP 的 FileZilla 连接到两个用户名,并且它们都可以工作。如果不启用 FTP,则两者都不会连接。

奇怪的是,我的代码将myusername1在我的代码中未启用 SSL 的情况下进行连接。

总之:

  • myusername1并且myusername2不会在未启用安全 FTP 的情况下连接到 FileZilla。
  • myusername1ftprequest.EnableSsl在没有启用的情况下在我的 C# 方法中工作。
  • myusername2无论是否ftprequest.EnableSsl启用,都无法在我的 C# 方法中工作。
  • using()在我的声明行触发了异常。

我刚刚注意到的其他事情,当我将鼠标悬停在我的 上时ftprequest,它会显示 NotSupportedException,但是无论我使用哪一组凭据,都会出现这种情况

ftprequest如果我在使用时将鼠标悬停在我的初始位置上myusername2,它会显示在我之前抛出的异常using()

在此处输入图像描述

4

2 回答 2

0

这可能是在黑暗中拍摄,但您是否尝试过使用 CredentialCache?

        System.Net.NetworkCredential nc = new System.Net.NetworkCredential("user", "password");
        System.Net.CredentialCache cc = new System.Net.CredentialCache();
        cc.Add(new Uri("ftp://m3database"), "Basic", nc);
        System.Net.FtpWebRequest ftprequest = (System.Net.FtpWebRequest)System.Net.WebRequest.Create("ftp://m3database/recover/");
        ftprequest.Credentials = cc;
        ftprequest.Method = System.Net.WebRequestMethods.Ftp.ListDirectory;

         using (var resp = ftprequest.GetResponse())
            {
                StreamReader reader = new StreamReader(resp.GetResponseStream());

                MessageBox.Show(reader.ReadToEnd());
            }
        }

credentialcache 还为您提供了一系列身份验证类型选项(“NTLM”、“Digest”、“Kerberos”、“Negotiate”...)。

更多在这里 --> http://msdn.microsoft.com/en-us/library/59x2s2s6.aspx

于 2013-03-08T21:19:44.523 回答
0

我正在通过 FTP 连接到单个 Linux 服务器。

CHMOD 第二个用户的 FTP 服务器/文件夹上的权限,它们应该与第一个用户相同。

CHMOD 777 将允许需要访问..

于 2013-09-09T15:47:11.303 回答