2012-04-03 34 views
6

Làm cách nào để dừng lớp System.Uri không mã hóa URL được mã hóa được truyền vào hàm tạo của nó? Hãy xem xét mã sau: -Làm cách nào để dừng System.Uri không mã hóa URL?

Uri uri = new Uri("http://foo.bar/foo%2FBar"); 
Console.WriteLine(uri.AbsoluteUri); 
uri = new Uri("http://foo.bar/foo%2FBar", false); 
Console.WriteLine(uri.AbsoluteUri); 
uri = new Uri("http://foo.bar/foo%2FBar", true); 
Console.WriteLine(uri.AbsoluteUri); 

Trong mỗi trường hợp, đầu ra là "http://foo.bar/foo/bar". Làm thế nào tôi có thể đảm bảo rằng sau khi instantiating một trường hợp Uri, Uri.AbsoluteUri sẽ trở lại "http://foo.bar/foo%2FBar"?

Trả lời

4

Lớp Uri không được sử dụng để tạo URI thoát, mặc dù bạn có thể sử dụng uri.OriginalString để truy xuất chuỗi được sử dụng để khởi tạo. Có thể bạn đang sử dụng UrlEncode nếu bạn cần mã hóa lại URI một cách an toàn.

Ngoài ra, theo thông số http://msdn.microsoft.com/en-us/library/9zh9wcb3.aspx thông số dontEscape trong trình khởi chạy Uri đã không còn được dùng nữa và sẽ luôn là sai.

UPDATE:

Có vẻ ai đó tìm thấy một cách (hack) để làm điều này - GETting a URL with an url-encoded slash

+0

Tôi đã sử dụng URLEncode. Vấn đề của tôi là thực sự khi cố gắng xây dựng một cá thể HttpWebRequest để thực hiện một cuộc gọi REST, nơi URL có thể đã thoát khỏi các ký tự trong nó (bao gồm một dấu gạch chéo như đã trình bày ở trên). Tôi đã sử dụng quá tải WebRequest.Create (UrlString) để tạo yêu cầu và nhận thấy rằng URL được truyền tới máy chủ đã không mã hóa dấu gạch chéo được mã hóa, gây ra lỗi phía máy chủ. Kiểm tra thêm cho thấy đây có lẽ là một vấn đề với lớp Uri, do đó câu hỏi của tôi. – Cleggy

+0

Xem liên kết trong bản cập nhật – PinnyM

+0

Cảm ơn bạn đã có liên kết ở đó, PinnyM. Do bản chất "hack khủng khiếp" của nó, tôi tự hỏi liệu tôi có nên đi theo con đường đó hay không, hoàn toàn khác để giải quyết vấn đề của tôi. Hiện tại tôi đang cố gắng gọi một dịch vụ REST, nhưng thay vào đó, tôi có thể thay đổi điều này thành một SOAP, điều này cũng sẽ làm giảm bớt vấn đề này. Tuy nhiên, bạn đã giải quyết vấn đề cụ thể này, vì vậy tôi sẽ đánh dấu đây là câu trả lời đúng. – Cleggy

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