System.Uri类截断尾部'';字符

本文关键字:字符 尾部 Uri System | 更新日期: 2023-09-27 17:58:28

如果我从后面有句号的字符串创建Uri类实例-'.',它们从生成的Uri对象中被截断。

例如C#中的

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

返回"/folder/"而不是"/folder…/"。

用"%2E"转义"."没有帮助。

如何使Uri类保持尾随句点字符?

System.Uri类截断尾部'';字符

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

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,上面的解决方法已经发布在那里。