2017-01-09 76 views
1

我有下面的代码:Uri中的所有特殊字符是什么?

string myString = "test://mytest/v1.0~admin#1~password"; 
var myUri = new Uri(myString); 

我发现#后的部分不在myUri.LocalPath

我试图用'&替换散列(#),这是没有问题的。在哪里我可以知道像#这样的特殊字符会在Uri中引起同样的问题?

+0

#之后的部分不是*应该*成为LocalPath的一部分......'#'字符分隔了URI的片段部分。 –

+0

我发现下面的代码可以保持uri中的#:myString = myString.Replace(“#”,Uri.HexEscape('#'));我在这里找到它:https://social.msdn.microsoft.com/Forums/vstudio/en-US/b1c72950-e07e-4935-bd70-7b5d68da6437/uri-class-not-works-for-ftpwebrequest-if-having -special-characters-in-uri-path-help?forum = netfxbcl在C#中是否有一个常用的方法会对整个字符串进行这种转换?如果有更多的特殊字符,不只是“#” – spspli

回答

0

哈希“#”仅供客户端使用,不会发送到服务器。它可以从JS访问客户端导航(即单页应用程序)。在问号之后,&符号被用作传递给GET请求的值的分隔符。例如:http://example.com/controller/action?a=1&b=2&c=3#client-only将a,b和c中的整数值传递给服务器,在那里它们将被解析为方法参数。 '#'后面的部分被服务器忽略。