如何阻止System.Uri取消编码URL?

时间:2012-04-03 05:00:11

标签: c# .net

如何阻止System.Uri类取消编码传递给其构造函数的编码URL?请考虑以下代码: -

Uri uri = new Uri("http://foo.bar/foo%2FBar");
Console.WriteLine(uri.AbsoluteUri);
uri = new Uri("http://foo.bar/foo%2FBar", false);
Console.WriteLine(uri.AbsoluteUri);
uri = new Uri("http://foo.bar/foo%2FBar", true);
Console.WriteLine(uri.AbsoluteUri);

在每种情况下,输出都是“http://foo.bar/foo/bar”。如何确保在实例化Uri实例后,Uri.AbsoluteUri将返回“http://foo.bar/foo%2FBar”?

1 个答案:

答案 0 :(得分:4)

尽管您可以使用Uri来检索用于初始化的字符串,但uri.OriginalString类不用于生成转义的URI。如果您需要安全地重新编码URI,则应该使用UrlEncode。

此外,根据http://msdn.microsoft.com/en-us/library/9zh9wcb3.aspx,Uri初始化程序中的dontEscape参数已被弃用,并且始终为false。

更新:

似乎有人找到了一种方法(黑客)来做这件事 - GETting a URL with an url-encoded slash