通过.Net访问localhost FTP服务器

时间:2014-09-04 15:44:46

标签: asp.net iis ftp ftpwebrequest

我有一个MVC应用程序,我正在尝试访问我在IIS中设置的localhost ftp服务器 - 最终它将访问其他一些ftp服务器,但我只是想在本地试用它。我使用FtpWebRequest编写了一个c#函数,但是当我调用GetResponse()时,它返回错误:“远程服务器返回错误:(530)未登录。”不确定如何以匿名或非匿名用户身份登录。如果我在IIS中有一个名为“MyFTPSite”的FTP站点并且启用了匿名身份验证,那么URL字符串是否格式正确?网络核心应该是什么? Files目录是ftproot的子代 - 我需要为Files文件夹添加虚拟目录吗?现在,ftp站点的物理路径设置为C:\ inetpub \ ftproot。 (在下面的代码中,localhost故意拼写错误的b / c网站不希望我使用localhost网址。)

 public override bool DownloadFile()
    {
        string fileName = System.IO.Path.GetFileName(this.UrlString);

        FtpWebRequest request = (FtpWebRequest)WebRequest.Create(this.UrlString);
        request.Method = WebRequestMethods.Ftp.DownloadFile;

        //anonymous logon
        request.Credentials = new NetworkCredential("anonymous", "<my email>");

        FtpWebResponse response = (FtpWebResponse)request.GetResponse();

        response.Close();
        return true;

    }

FTPDownload download = new FTPDownload(@"ftp://lclhost/MyFTPSite/Files/w4.pdf");
download.DownloadFile();

2 个答案:

答案 0 :(得分:0)

您的代码看起来可能很好 - 您可以通过修改IIS FTP服务器设置来解决此问题。

首先,有一些想法可以获得基本的已知配置。

  1. 打开IIS管理器工具。
  2. 让我们确保您仍然拥有IUSR作为IIS在其内部安全方案中用于匿名身份验证的用户。点击左侧边栏中的顶部节点(应该是您的计算机名称),然后点击主要内容区域中Authentication部分下的IIS。确保已启用Anonymous Authentication。点击此项,然后点击右侧边栏中的Edit。确保已将其设置为Specific User,其值为IUSR。只要是这种情况,我们就不需要处理IUSR密码等。
  3. 点击左侧边栏中的FTP站点。
  4. 在右侧边栏中,点击Basic Settings。记下网站指向的目录 - 例如。 C:\inetpub\ftproot,并确保这与您的代码尝试下载的测试文件的预期位置相匹配。
  5. 点击右侧边栏,点击Bindings。由于您的代码未提及特定端口,因此请确保在此处设置端口21。至于IP Address,将其设置为All Unassigned应该没问题,或者您可以设置为`127.0.0.1&#39;。
  6. 在主窗口区域中,让我们完成设置。
    • FTP AuthenticationAnonymous Authentication应设为EnabledBasic Authentication应设为Disabled提示:使用<alt> + <left>键盘快捷键返回主模块列表
    • FTP Authorization:添加Allow Rule,如下所示:选择Specified Users,然后设置为IUSR。授予Read权限。
    • FTP IP Address and Domain Restrictions:如果您看到任何内容,请删除此处显示的所有配置规则。在右侧边栏中点击Edit Feature Settings,然后确保在Allow下将其设置为Access for Unspecified Clients。您可以不选中Enable Domain Retrictions
    • FTP SSL Settings:检查Allow SSL Connections。 (启用Require SSL connections不是您想要的。)
  7. 好的,现在在左侧边栏中,右键单击您的FTP站点并选择Edit Permissions,这将弹出属性窗口。转到Security选项卡,然后根据需要进行一些ACL更改。最重要的是,IUSR帐户至少需要以下内容:Read & ExecuteList folder contentsRead。这将让您的代码匿名下载文件。您可能需要添加ModifyWrite才能上传功能。要进行更改,您可能需要禁用父目录的继承 - 如果是这样,我建议复制现有权限,而不是从空白平板开始。如果您在此处进行了任何更改,则可能需要使用Replace all child object permissions...选项,以确保现在从根目录下的所有内容都具有相同的访问控制条目。
  8. 打开管理员命令提示符并键入iisreset
  9. 好的,现在已经配置了IIS,让我们看一下代码。在FTP站点的根目录中放置一个名为test.txt的小文本文件后,我从以下代码中获取了以下代码,以便在我的本地计算机上运行:

    string ftpHost = "ftp://localhost/test.txt";
    
    FtpWebRequest request = (FtpWebRequest) WebRequest.Create(ftpHost);
    request.Method = WebRequestMethods.Ftp.DownloadFile;
    
    //anonymous logon
    request.Credentials = new NetworkCredential("anonymous", "test@test.com"); 
    
    FtpWebResponse response = (FtpWebResponse)request.GetResponse();
    
    Stream responseStream = response.GetResponseStream();
    StreamReader reader = new StreamReader(responseStream);
    Console.WriteLine(reader.ReadToEnd());
    
    Console.WriteLine("Download Complete, status {0}", response.StatusDescription);
    
    reader.Close();
    response.Close();
    
    Console.ReadLine();
    

    [免责声明:这些说明用于配置在开发机器上运行的本地FTP服务器,以允许.NET FtpClient类匿名连接到它。不要将这些好的说明视为在生产环境中使用。]

答案 1 :(得分:0)

如果您在IIS上设置匿名登录,请不要设置任何网络凭据。 注释掉:

  //anonymous logon
  //  request.Credentials = new NetworkCredential("anonymous", "<my email>");