“无法解析主机名”来自“ftp”URL

时间:2013-08-29 21:09:00

标签: c#

我刚刚从GoDaddy购买了一些在线存储空间,我试图将FTP存入我的存储帐户。问题是,我可以使用FileZilla查看和修改我的帐户,但由于“无法解析主机名”错误,我的C Sharp程序甚至无法访问它。

我认为这是因为我的帐户的整个ftp地址在网址中有两个“@”符号,这是URI创建过程中的肆虐。

无论如何我可以解决这个问题,还是因为GoDaddy存储的命名惯例而搞砸了?

网址为:ftp:[slashslash] lastname.firstname @ gmail.com @ onlinefilefolder.com / Home /

2 个答案:

答案 0 :(得分:3)

出于某些特定原因,您是否需要在URI中指定用户名和密码?您只需连接到主机,然后提供凭据即可。

// Create a request to the host
var request = (FtpWebRequest)WebRequest.Create("ftp://onlinefilefolder.com");

// Set the username and password to use
request.Credentials = new NetworkCredential ("lastname.firstname@gmail.com","password");

request.Method = WebRequestMethods.Ftp.UploadFile;

var sourceStream = new StreamReader("testfile.txt");
var fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
sourceStream.Close();
request.ContentLength = fileContents.Length;

Stream requestStream = request.GetRequestStream();
requestStream.Write(fileContents, 0, fileContents.Length);
requestStream.Close();

FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Console.WriteLine("Upload File Complete, status {0}", response.StatusDescription);

response.Close();

答案 1 :(得分:2)

例外来自System.Uri,尽管标准定义可以接受,但不允许使用两个@符号。

// This will reproduce the reported exception, I assume it is what your code is
// doing either explicitly, or somewhere internally
new Uri(@"ftp://lastname.firstname@gmail.com@onlinefilefolder.com/Home/")

一个潜在的解决方法是对第一个@符号进行百分比编码,这将允许Uri实例无异常地实例化 - 但根据服务器的行为可能会也可能不会起作用(I我只使用过这种方法几次,但它对我有用):

new Uri(@"ftp://lastname.firstname%40gmail.com@onlinefilefolder.com/Home/")