2009-05-25 17 views
11

Tôi đang cố gắng thực hiện POST cho một trang web bằng cách sử dụng WebRequest trong C#. Trang web tôi đăng lên là trang web SMS và nội dung messagetext là một phần của URL. Để tránh không gian trong URL tôi gọi HttpUtility.Encode() để URL mã hóa nó."Định dạng của URI không thể xác định được" với WebRequest

Nhưng tôi tiếp tục nhận một URIFormatException - "không hợp lệ URI: Định dạng của URI không thể xác định được" - khi tôi sử dụng mã tương tự như sau:

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(); 

Trường hợp ngoại lệ xảy ra khi tôi gọi WebRequest.Create().

Tôi đang làm gì sai?

Trả lời

16

Bạn chỉ nên mã hóa các đối số, không phải toàn bộ url, vì vậy hãy thử:

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(); 

Encoding toàn bộ url sẽ có nghĩa là: // và? cũng được mã hóa. Chuỗi được mã hóa sau đó không còn là url hợp lệ nữa.

+0

Như đã thảo luận trong [bài đăng SO này] (http://stackoverflow.com/a/1148326/5838198), tốt nhất là sử dụng 'Uri.EscapeDataString()' thay vì phương thức 'HttpUtility' hoặc' Server' . – Siavas

1

UrlEncode chỉ nên được sử dụng trên chuỗi truy vấn. Hãy thử điều này:

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

Phiên bản hiện tại của mã của bạn là url mã hóa dấu gạch chéo và dấu hai chấm trong URL, điều này gây nhầm lẫn yêu cầu web.

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