2010-02-18 16 views
10

HttpWebRequest ile kodlanmış URL kod çözme konusunda sorun yaşıyorum. C# HttpWebRequest URI kodlamasını kaybeden Yardım

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

uç istek URL'ye bakarak olduğunu dönüşür:

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

tabii 400 Geçersiz istek döndürür hangisi. HttpWebRequest yerine URI sınıfı ile yapılacak bir şey olduğunu tahmin ediyorum. Bunun olmasını nasıl engellerim?

+0

benim için bir cazibe gibi çalıştı yoktur? Teşekkürler –

+0

URL, alanın kodlandığını ve gereksinim duyduğunu görebileceğiniz https://www.google.com/webmasters/tools/feeds/http%3A%2F%2Fwww%2example%2Ecom%2F/crawlissues/ olmalıdır. kodlanmış kalmak. –

cevap

0

Emin değilim ama HttpServerUtility.UrlEncode yöntemi yardımcı olacaktır.

Upd. Alternatif olarak WebClient sınıfını kullanabilirsiniz.

+2

Teşekkürler ama url zaten kodlanmış, sorun bir şey onu çözüyor olmasıdır. –

+0

WebClient sınıfını denedim ve farketmez. –

1

Bunu url talep edebilirsiniz sanmıyorum GET için POST isteği yöntemini değiştirmek için.

Bir sorgu parametresinde %2F kodunu çözmez. kodlanmış veri bir sorgu parametresi olsaydı Yani, işe yarar mıydı:

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

Bu Uri sınıfının bir can sıkıcı "güvenlik özelliği" dir. 4.0 veya daha yenisini kullanıyorsanız, turn it off in your configuration file; aksi halde resort to reflection'a sahip olursunuz.

+0

Teşekkürler, Richard! Bunun için her yerde aradım - Büyü gibi aşağıdaki eserlerini .net 4.5

+0

Yapılandırma dosya da 4.6 üzerinde devre dışı bırakabilirsiniz. – r590

+0

@ r590: Doğru. "4.0 ya da daha sonra" demeliydim, ama bunu yayınladığımda "4.0 veya 4.5" anlamına geliyordu. :) –

1

bu

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

için çok daha basit bir yolu çıkış URL Ne bekliyoruz edilir