2009-05-25 29 views
11

Estoy tratando de realizar una POST a un sitio usando una WebRequest en C#. El sitio que estoy publicando es un sitio SMS, y el texto del mensaje es parte de la URL. Para evitar espacios en la URL, estoy llamando a HttpUtility.Encode() para que la URL la codifique."No se pudo determinar el formato del URI" con WebRequest

Pero sigo recibiendo un UriFormatException - "URI no válido: El formato del URI no se pudo determinar" - cuando se utiliza código similar al siguiente:

string url = "http://www.stackoverflow.com?question=a sentence with spaces"; 
string encoded = HttpUtility.UrlEncode(url); 

WebRequest r = WebRequest.Create(encoded); 
r.Method = "POST"; 
r.ContentLength = encoded.Length; 
WebResponse response = r.GetResponse(); 

La excepción se produce cuando llamo WebRequest.Create().

¿Qué estoy haciendo mal?

Respuesta

16

Sólo debe codificar el argumento, no la URL completa, a fin de tratar:

string url = "http://www.stackoverflow.com?question=" + HttpUtility.UrlEncode("a sentence with spaces"); 

WebRequest r = WebRequest.Create(url); 
r.Method = "POST"; 
r.ContentLength = encoded.Length; 
WebResponse response = r.GetResponse(); 

que codifica la url significaría el: // y la? obtener codificado también. La cadena codificada ya no es una url válida.

+0

Como se discutió en [esta publicación SO] (http://stackoverflow.com/a/1148326/5838198), es mejor usar 'Uri.EscapeDataString()' en lugar de los métodos 'HttpUtility' o' Server' . – Siavas

1

UrlEncode solo debe utilizarse en la cadena de consulta. Prueba esto:

string query = "a sentence with spaces"; 
string encoded = "http://www.stackoverflow.com/?question=" + HttpUtility.UrlEncode(query); 

La versión actual de su código es URLEncoding los tajos y de colon en la URL, que es confuso WebRequest.

Cuestiones relacionadas