2013-08-22 20 views
6

Đây là một phần của mã của tôi:Nhà xây dựng Uri (Uri, String) không hoạt động đúng cách?

Uri branches = new Uri(@"https://127.0.0.1:8443/svn/CXB1/Validation/branches"); 
Uri testBranch = new Uri(branches, "test"); 

Tôi hy vọng testBranches sẽ https://127.0.0.1:8443/svn/CXB1/Validation/branches/test, nhưng nó là https://127.0.0.1:8443/svn/CXB1/Validation/test. Tôi không thể hiểu tại sao Uri (Uri, string) constructor lại ăn phần cuối của con đường.

+5

thử 'Uri chi nhánh = new Uri (@ "https://127.0.0.1:8443/svn/CXB1/Validation/branches/"); ' – I4V

+2

'Uri' không phải là một đường dẫn, nó không hoạt động giống như' Path.Combine'. http://stackoverflow.com/a/1527643/284240 (xem ý kiến) –

Trả lời

8

Thêm một dấu gạch chéo sau khi chi nhánh

Uri branches = new Uri(@"https://127.0.0.1:8443/svn/CXB1/Validation/branches/"); 
    Uri testBranch = new Uri(branches, "test"); 
+0

Thêm dấu gạch chéo không giúp được gì. Bây giờ tôi có 'https: //127.0.0.1: 8443/test' – Max

+0

Thêm dấu gạch chéo ở cuối url đầu tiên cũng không có hiệu lực vì hàm tạo Uri (string) loại bỏ nó. Và 'chi nhánh' sẽ là' https: //127.0.0.1: 8443/svn/CXB1/Xác thực/chi nhánh' – Max

+0

Xin lỗi, tôi đã tìm thấy một probem ở phần khác của mã. Thêm dấu gạch chéo hoạt động tốt. Cảm ơn bạn. – Max

2

Đó là hành vi mong đợi.

Nếu, trong một trình duyệt, bạn đang trên một trang web với đầy đủ URI của nó như https://127.0.0.1:8443/svn/CXB1/Validation/branches, và nếu, trên trang đó, bạn nhấp vào một liên kết mà chỉ có một href của test, bạn sẽ được đưa đến https://127.0.0.1:8443/svn/CXB1/Validation/test. Đây là cách một URI tương đối được tạo thành với một URI cơ bản.

Mặt khác, nếu URI đầu tiên kết thúc bằng / thì nó sẽ hoạt động như bạn mong đợi.

+0

Có bất kỳ tài liệu chính thức nào cho điều này (tức là, URI nên hoạt động theo cách này) không? Tôi không thể tìm thấy. –

+0

Có phải [this] (https://tools.ietf.org/html/rfc3986#section-5.2.3) không? –

+0

@RovinBhandari - vâng, viên đạn thứ hai đó dường như đã được bảo vệ - bạn xóa tất cả các ký tự ở bên phải của '/' trước khi thêm văn bản mới. –

3

Hành vi bạn thấy là chính xác, vì thay thế phần cuối cùng là ý tưởng hay nếu bạn muốn thay đổi tên tệp.

Tôi sẽ thêm dấu gạch chéo ngược ở cuối phần đầu tiên. Sau đó, rõ ràng rằng đây là một thư mục, nếu không nó có thể được hiểu là một tập tin.

Uri branches = new Uri(@"https://127.0.0.1:8443/svn/CXB1/Validation/branches/"); 
Uri testBranch = new Uri(branches, "test"); 
Console.WriteLine(testBranch); 

sẽ nhận được kết quả này:

https://127.0.0.1:8443/svn/CXB1/Validation/branches/test 
Các vấn đề liên quan