System.Uri类截断尾随’。’ 人物

如果我从具有尾随句点的字符串创建一个Uri类实例 – ‘。’,它们将从生成的Uri对象中截断。

例如在C#中:

Uri test = new Uri("http://server/folder.../"); test.PathAndQuery; 

返回“/ folder /”而不是“/folder…/”。

逃避“。” 与“%2E”没有帮助。

如何让Uri类保留尾随句点字符?

您可以在调用代码之前使用reflection。

 MethodInfo getSyntax = typeof(UriParser).GetMethod("GetSyntax", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic); FieldInfo flagsField = typeof(UriParser).GetField("m_Flags", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); if (getSyntax != null && flagsField != null) { foreach (string scheme in new[] { "http", "https" }) { UriParser parser = (UriParser)getSyntax.Invoke(null, new object[] { scheme }); if (parser != null) { int flagsValue = (int)flagsField.GetValue(parser); // Clear the CanonicalizeAsFilePath attribute if ((flagsValue & 0x1000000) != 0) flagsField.SetValue(parser, flagsValue & ~0x1000000); } } } Uri test = new Uri("http://server/folder.../"); Console.WriteLine(test.PathAndQuery); 

这已经提交给Connect ,上面的解决方法已经发布在那里。