以下代码抛出System.UriFormatException:
var uri = new UriBuilder("ftp://user:pass#word@ftp.somewhere.com:21/fu/bar.zip");
System.UriFormatException:无效的URI:由于存在冒号(':')而无法解析端口,因此需要端口。
从密码字段中删除#符号可解决此问题。
谢谢,安德鲁
答案 0 :(得分:11)
您应该可以使用%23代替。
百分比符号后跟两位十六进制数字是如何在URL中转义字符。 23是ASCII表中哈希/井号符号的十六进制值。
您应该通过编码整个用户名和密码字段来解决此问题,而不是解决此特定问题。您应该可以使用System.Web.HttpUtility.UrlEncode
执行此操作(参考System.Web
程序集):
string username = ...
string password = ...
string url = string.Format("ftp://{0}:{1}@ftp.example.com:21/fu/bar.zip", HttpUtility.UrlEncode(username),
HttpUtility.UrlEncode(password));
答案 1 :(得分:1)
#需要编码,因为它被认为是一个特殊字符。即使这样,也不确定它会起作用。没试过。