2010-02-18 28 views
10

Có vấn đề với HttpWebRequest giải mã URL được mã hóa của tôi.Trợ giúp với C# HttpWebRequest URI mất mã hóa

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

Khi nhìn vào URL yêu cầu cuối cùng là trở thành:

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

Trong đó tất nhiên trả về một yêu cầu Xấu 400. Tôi đoán nó là một cái gì đó todo với lớp URI hơn là HttpWebRequest. Làm cách nào để ngăn điều này xảy ra?

+0

gì là URL đầu ra mà bạn đang mong đợi? Cảm ơn –

+0

URL có nghĩa là https://www.google.com/webmasters/tools/feeds/http%3A%2F%2Fwww%2example%2Ecom%2F/crawlissues/ như bạn có thể thấy tên miền được mã hóa và cần để được mã hóa. –

Trả lời

0

Không chắc chắn nhưng có thể là phương pháp HttpServerUtility.UrlEncode sẽ giúp ích.

Cập nhật. Hoặc bạn có thể sử dụng lớp WebClient.

+2

Cảm ơn nhưng url đã được mã hóa, vấn đề là một cái gì đó đang giải mã nó. –

+0

Tôi đã thử lớp WebClient và nó không có sự khác biệt. –

0

Cố gắng thay đổi phương thức Yêu cầu từ POST thành GET

1

Tôi không nghĩ bạn có thể yêu cầu url đó.

Nó sẽ không giải mã %2F trong tham số truy vấn. Vì vậy, nó sẽ hoạt động nếu dữ liệu được mã hóa nằm trong tham số truy vấn:

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

Đây là tính năng bảo mật "gây phiền nhiễu" của lớp Uri. Nếu bạn đang sử dụng phiên bản 4.0 trở lên, bạn có thể turn it off in your configuration file; nếu không, bạn sẽ phải resort to reflection.

+0

Cảm ơn, Richard! Tôi đã tìm kiếm khắp mọi nơi cho điều này - các công việc sau như một nét duyên dáng trong .net 4.5

+0

Config tập tin cũng có thể vô hiệu hóa nó trên 4.6. – r590

+0

@ r590: Đúng. Tôi nên nói "4.0 hoặc mới hơn", nhưng điều đó có nghĩa là "4.0 hoặc 4.5" khi tôi đăng bài này. :) –

1

Có một cách đơn giản hơn nhiều để này

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

làm việc như một nét duyên dáng cho tôi

Các vấn đề liên quan