C# &引用;无法分析主机名";从「;ftp“;统一资源定位地址
我刚从GoDaddy那里购买了一些在线存储设备,并试图通过FTP将其发送到我的存储帐户中。问题是,我可以使用FileZilla查看和修改我的帐户,但我的C Sharp程序甚至不会访问它,因为“主机名无法解析”错误 我相信这是因为我帐户的整个ftp地址在url中有两个“@”符号,这对URI创建过程造成了极大的破坏 有什么办法可以绕过这个问题吗?还是因为GoDaddy存储的命名约定,我就完蛋了C# &引用;无法分析主机名";从「;ftp“;统一资源定位地址,c#,C#,我刚从GoDaddy那里购买了一些在线存储设备,并试图通过FTP将其发送到我的存储帐户中。问题是,我可以使用FileZilla查看和修改我的帐户,但我的C Sharp程序甚至不会访问它,因为“主机名无法解析”错误 我相信这是因为我帐户的整个ftp地址在url中有两个“@”符号,这对URI创建过程造成了极大的破坏 有什么办法可以绕过这个问题吗?还是因为GoDaddy存储的命名约定,我就完蛋了 URL为:ftp:[slashslash]lastname。firstname@gmail.com@onl
URL为:ftp:[slashslash]lastname。firstname@gmail.com@onlinefilefolder.com/Home/异常源于
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
实例进行实例化,但根据服务器的行为,可能会或可能不会工作(我只使用过几次这种方法,但它对我有效):
出于某种特定原因,是否需要在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();
你到底想干什么?您有任何示例代码吗?您要传递的godaddy主机名的格式到底是什么?URL是:URI可以有
@
它是一个保留的分隔符。似乎你的解析器不太好。你能添加一些可以查看/调试的代码吗?你的建议已经阻止了错误,我的程序甚至“成功”上传到我的在线存储帐户,但每当我带着FileZilla去那里时,文件实际上并不在那里。似乎百分比编码对我来说不是一个可行的选择。
// 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();