System.Uri class truncates trailing '.' characters

后端 未结 1 2013

If I create a Uri class instance from string that has trailing full stops - \'.\', they are truncated from the resulting Uri object.

For example in C#:



        
相关标签:
1条回答
  • 2021-01-17 22:46

    You can use reflection before your calling code.

    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);
    

    This has been submitted to Connect and the workaround above was posted there.

    0 讨论(0)
提交回复
热议问题