2010-02-18 6 views
10

Ein Problem mit HttpWebRequest Decodierung meiner codierten URL.Hilfe mit C# HttpWebRequest URI verliert seine Codierung

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

Wenn am Ende URL suchen ist wird:

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

Was natürlich eine 400 Bad Anfrage zurückgibt. Ich vermute, es ist etwas mit der URI-Klasse und nicht mit HttpWebRequest. Wie verhindere ich das?

+0

Was die Ausgabe-URL, die Sie erwarten? Danke –

+0

Die URL soll https://www.google.com/webmasters/tools/feeds/http%3A%2F%2Fwww%2example%2Ecom%2F/crawlissues/ sein, da die Domain verschlüsselt ist und benötigt wird verschlüsselt bleiben. –

Antwort

0

Nicht sicher, aber möglicherweise HttpServerUtility.UrlEncode Methode wird helfen.

Upd. Alternativ können Sie die WebClient-Klasse verwenden.

+2

Danke, aber die URL ist bereits codiert, das Problem ist, dass etwas es entschlüsselt. –

+0

Ich habe die WebClient-Klasse ausprobiert und es macht keinen Unterschied. –

0

Versuchen Sie, die Request-Methode von POST ändern GET

1

Ich glaube nicht, können Sie die URL-Anfrage.

Es wird %2F in einem Abfrageparameter nicht decodieren. So würde es funktionieren, wenn die codierten Daten in einem Abfrage-Parameter sind:

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

Dies ist ein lästiges „Sicherheitsmerkmal“ der Uri-Klasse. Wenn Sie 4.0 oder höher verwenden, können Sie turn it off in your configuration file; Andernfalls müssen Sie resort to reflection.

+0

Danke, Richard! Ich habe für diese überall gesucht - folgende Arbeiten wie ein Zauber in .net 4.5

+0

Config Datei kann sie auch am 4.6 deaktivieren. – r590

+0

@ r590: Richtig. Ich hätte "4.0 oder später" sagen sollen, aber das bedeutete "4.0 oder 4.5", als ich das gepostet habe. :) –

1

Es gibt eine viel einfachere Art und Weise zu diesem für mich

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

arbeitete wie ein Charme