如何阻止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”?
答案 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