2012-04-03 12 views
6

¿Cómo impido que la clase System.Uri descodifique una URL codificada pasada a su constructor? Tenga en cuenta el siguiente código: -¿Cómo impido que System.Uri descodifique una URL?

Uri uri = new Uri("http://foo.bar/foo%2FBar"); 
Console.WriteLine(uri.AbsoluteUri); 
uri = new Uri("http://foo.bar/foo%2FBar", false); 
Console.WriteLine(uri.AbsoluteUri); 
uri = new Uri("http://foo.bar/foo%2FBar", true); 
Console.WriteLine(uri.AbsoluteUri); 

En cada caso, la salida es "http://foo.bar/foo/bar". ¿Cómo puedo asegurarme de que después de instanciar una instancia de Uri, Uri.AbsoluteUri devolverá "http://foo.bar/foo%2FBar"?

Respuesta

4

La clase Uri no se usa para generar un URI escapado, aunque puede usar uri.OriginalString para recuperar la cadena utilizada para la inicialización. Probablemente deberías estar usando UrlEncode si necesitas volver a codificar un URI de forma segura.

Además, según http://msdn.microsoft.com/en-us/library/9zh9wcb3.aspx, el parámetro dontEscape en el inicializador de Uri ha quedado en desuso y siempre será falso.

ACTUALIZACIÓN:

parece que alguien encontró una manera (corte) para hacer esto - GETting a URL with an url-encoded slash

+0

ya estoy usando UrlEncode de. Mi problema es en realidad cuando intento construir una instancia HttpWebRequest para hacer una llamada REST donde la URL puede haber escapado de los caracteres en ella (incluyendo una barra como se demostró anteriormente). Estaba usando la sobrecarga de WebRequest.Create (UrlString) para crear la solicitud, y encontré que la URL que se pasa al servidor estaba descodificando la barra diagonal codificada, lo que causaba un error en el servidor. Pruebas posteriores revelaron que este era probablemente un problema con la clase Uri, de ahí mi pregunta. – Cleggy

+0

Ver enlace en la actualización – PinnyM

+0

Gracias por el enlace allí, PinnyM. Debido a la naturaleza del "truco terrible", me pregunto si debería tomar esa ruta, o tomar otra táctica por completo para resolver mi problema. Actualmente estoy intentando llamar a un servicio REST, pero tengo la flexibilidad de cambiar esto a uno SOAP, lo que también debería aliviar este problema. Sin embargo, has resuelto este problema en particular, así que voy a marcar esto como la respuesta correcta. – Cleggy

Cuestiones relacionadas