我有一个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();
答案 0 :(得分:0)
您的代码看起来可能很好 - 您可以通过修改IIS FTP服务器设置来解决此问题。
首先,有一些想法可以获得基本的已知配置。
IUSR
作为IIS在其内部安全方案中用于匿名身份验证的用户。点击左侧边栏中的顶部节点(应该是您的计算机名称),然后点击主要内容区域中Authentication
部分下的IIS
。确保已启用Anonymous Authentication
。点击此项,然后点击右侧边栏中的Edit
。确保已将其设置为Specific User
,其值为IUSR
。只要是这种情况,我们就不需要处理IUSR
密码等。Basic Settings
。记下网站指向的目录 - 例如。 C:\inetpub\ftproot
,并确保这与您的代码尝试下载的测试文件的预期位置相匹配。Bindings
。由于您的代码未提及特定端口,因此请确保在此处设置端口21
。至于IP Address
,将其设置为All Unassigned
应该没问题,或者您可以设置为`127.0.0.1&#39;。FTP Authentication
:Anonymous Authentication
应设为Enabled
。 Basic 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
不是您想要的。)Edit Permissions
,这将弹出属性窗口。转到Security
选项卡,然后根据需要进行一些ACL更改。最重要的是,IUSR
帐户至少需要以下内容:Read & Execute
,List folder contents
,Read
。这将让您的代码匿名下载文件。您可能需要添加Modify
和Write
才能上传功能。要进行更改,您可能需要禁用父目录的继承 - 如果是这样,我建议复制现有权限,而不是从空白平板开始。如果您在此处进行了任何更改,则可能需要使用Replace all child object permissions...
选项,以确保现在从根目录下的所有内容都具有相同的访问控制条目。iisreset
好的,现在已经配置了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>");