2011-06-05 10 views
8

Si creo una instancia de clase Uri desde una cadena que tiene puntos finales finales - '.', se truncan desde el objeto Uri resultante.System.Uri class trunca trailing '.' caracteres

Por ejemplo en C#:

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

devuelve "/ carpeta /" en lugar de "/folder.../".

Escaping "." con "% 2E" no ayudó.

¿Cómo puedo hacer que la clase Uri mantenga los caracteres del período final?

Respuesta

8

Puede usar la reflexión antes del código de llamada.

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

Esto ha sido sometido a Connect y la solución anterior fue publicado allí.

+0

Ayuda. Pero ahora necesito preservar el seguimiento '.' en la llamada HttpContext.Current.Request.Url.PathAndQuery. He creado otra pregunta para esto: http://stackoverflow.com/questions/6804291/asp-net-httprequest-url-truncates-trailing-characters –

Cuestiones relacionadas