我刚刚从GoDaddy购买了一些在线存储空间,我试图将FTP存入我的存储帐户。问题是,我可以使用FileZilla查看和修改我的帐户,但由于“无法解析主机名”错误,我的C Sharp程序甚至无法访问它。
我认为这是因为我的帐户的整个ftp地址在网址中有两个“@”符号,这是URI创建过程中的肆虐。
无论如何我可以解决这个问题,还是因为GoDaddy存储的命名惯例而搞砸了?
网址为:ftp:[slashslash] lastname.firstname @ gmail.com @ onlinefilefolder.com / Home /
答案 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/")