使用不同的用户名连接到同一服务器

Luk*_*uke 7 c# ftp wpf

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

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我通过FTP连接到单个Linux服务器.我使用的凭据myusername1myusername2连接.

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

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

我尝试过的事情:

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

特殊情况是我的代码将myusername1在我的代码中未启用SSL的情况下连接使用.

综上所述:

  • myusername1myusername2如果没有启用安全FTP ,将无法在FileZilla上连接.
  • myusername1我的C#方法没有ftprequest.EnableSsl启用.
  • myusername2无论是否ftprequest.EnableSsl启用,都无法在我的C#方法中工作.
  • 我的using()陈述引发了异常.

我刚刚注意到的其他东西,当我将鼠标悬停在我的上方时ftprequest,它会显示NotSupportedException,但无论我使用哪组凭据,都会显示

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

在此输入图像描述

Goj*_*tah 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());
            }
        }
Run Code Online (Sandbox Code Playgroud)

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

更多信息--> http://msdn.microsoft.com/en-us/library/59x2s2s6.aspx