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#:
Uri test = new Uri("http://server/folder.../");
test.PathAndQuery;
returns "/folder/" instead of "/folder.../".
Escaping "." with "%2E" did not help.
How do I make the Uri class to keep trailing period characters?
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.