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

时间:2011-06-05 00:18:45

标签: c# .net asp.net escaping uri

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

例如在C#中:

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

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

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

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

1 个答案:

答案 0 :(得分:8)

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

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