当密码或用户名字段包含特殊字符时,System.Uri无法解析

时间:2010-03-08 13:20:02

标签: c# parsing uri

以下代码抛出System.UriFormatException:

var uri = new UriBuilder("ftp://user:pass#word@ftp.somewhere.com:21/fu/bar.zip");

System.UriFormatException:无效的URI:由于存在冒号(':')而无法解析端口,因此需要端口。

从密码字段中删除符号可解决此问题。

  1. 符号是密码字段中的有效字符吗?
  2. 有没有办法逃避这个?
  3. 这是Uri类解析例程中的已知错误吗?
  4. 如何解决这个问题 - 假设您无法更改密码? ; - )
  5. 谢谢,安德鲁

2 个答案:

答案 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)

#需要编码,因为它被认为是一个特殊字符。即使这样,也不确定它会起作用。没试过。