2010-02-18 8 views
10

Tengo un problema con HttpWebRequest descodificando mi URL codificada.Ayuda con C# HttpWebRequest URI perdiendo su codificación

var requestUrl = "https://www.google.com/webmasters/tools/feeds/http%3A%2F%2Fwww%2example%2Ecom%2F/crawlissues/"; 
var request = (HttpWebRequest)WebRequest.Create(requestUrl); 

Al mirar solicitud de URL final es se convierte en:

https://www.google.com/webmasters/tools/feeds/http://www.example.com//crawlissues/

Lo que por supuesto devuelve una solicitud incorrecta 400. Supongo que es algo todo con la clase URI en lugar de HttpWebRequest. ¿Cómo evito que esto suceda?

+0

¿Cuál es la URL de salida que están esperando? Gracias –

+0

La URL debe ser https://www.google.com/webmasters/tools/feeds/http%3A%2F%2Fwww%2example%2Ecom%2F/crawlissues/, ya que puede ver que el dominio está codificado y necesita permanecer codificado –

Respuesta

0

No estoy seguro, pero puede ser HttpServerUtility.UrlEncode método ayudará.

Upd. Alternativamente, puede usar la clase WebClient.

+2

Gracias pero la url ya está codificada, el problema es que algo está decodificando. –

+0

He probado la clase WebClient y no hace ninguna diferencia. –

0

tratar de cambiar el método de solicitud de POST a GET

1

no creo que usted puede solicitar que url.

No decodificará %2F en un parámetro de consulta. Por lo tanto, funcionaría si los datos codificados se encontraba en un parámetro de consulta:

requestUrl = "https://google.com/tools?feeds=http%3A%2F%2Fwww%2example%2Ecom%2F/crawlissues/"; 
var request = (HttpWebRequest)WebRequest.Create(requestUrl); 
4

Ésta es una "función de seguridad" molesto de la clase Uri. Si está utilizando 4.0 o posterior, puede turn it off in your configuration file; de lo contrario, tendrá que resort to reflection.

+0

¡Gracias, Richard! He estado buscando por todas partes para esto - los siguientes trabajos como un encanto en .NET 4.5

+0

Config el archivo también puede deshabilitarlo en 4.6. – r590

+0

@ r590: Correcto. Debería haber dicho "4.0 o posterior", pero eso significaba "4.0 o 4.5" cuando publiqué esto. :) –

1

Hay una manera mucho más simple a esta

var request=(HttpWebRequest)WebRequest.Create(Uri.EscapeUriString(requestUrl)); 
request.Headers.Add("Content-Transfer-Encoding","binary"); 

trabajó como un encanto para mí

Cuestiones relacionadas