3

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

我相信这是因为我帐户的整个 ftp 地址在 url 中有两个“@”符号,这是 URI 创建过程中的严重破坏。

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

URL 是:ftp:[slashslash]lastname.firstname@gmail.com@onlinefilefolder.com/Home/

4

2 回答 2

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();
于 2013-08-29T22:03:02.307 回答
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实例无例外地被实例化——但可能会或可能不会工作,具体取决于服务器的行为(我只使用过这种方法几次,但它已经奏效了为了我):

new Uri(@"ftp://lastname.firstname%40gmail.com@onlinefilefolder.com/Home/")
于 2013-08-29T21:24:08.813 回答