2013-08-22 19 views
6

Tutaj jest część mojego kodu:Konstruktor Uri (Uri, String) nie działa poprawnie?

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

Spodziewam testBranches będzie https://127.0.0.1:8443/svn/CXB1/Validation/branches/test, ale jest https://127.0.0.1:8443/svn/CXB1/Validation/test. Nie mogę zrozumieć, dlaczego konstruktor Uri (Uri, String) zjada ostatnią część ścieżki.

+5

try 'oddziały Uri = new Uri (@ "https://127.0.0.1:8443/svn/CXB1/Validation/branches/");' – I4V

+2

'Uri' nie jest ścieżką, nie działa tak samo jak' Path.Combine'. http://stackoverflow.com/a/1527643/284240 (patrz komentarze) –

Odpowiedz

8

Dodaj ukośnik po gałęziach

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

Dodanie ukośnika nie pomogło. Teraz mam 'https: //127.0.0.1: 8443/test' – Max

+0

Dodanie ukośnika na końcu pierwszego adresu URL również nie ma żadnego efektu, ponieważ konstruktor Uri (ciąg) usuwa go. I 'branches' będzie' https: //127.0.0.1: 8443/svn/CXB1/Validation/branches' – Max

+0

Niestety, znalazłem probem w innej części kodu. Dodanie ukośnika działa dobrze. Dziękuję Ci. – Max

2

To oczekiwanego zachowania.

Jeżeli w przeglądarce, byłaś na stronie z pełnym URI jako https://127.0.0.1:8443/svn/CXB1/Validation/branches, a jeśli na tej stronie kliknięciu na link, który właśnie miał href z test, można byłoby podjąć w celu https://127.0.0.1:8443/svn/CXB1/Validation/test. W ten sposób składa się względny URI z podstawowym URI.

Z drugiej strony, jeśli pierwszy identyfikator URI zakończyłby się z /, to działałby zgodnie z oczekiwaniami.

+0

Czy jest do tego oficjalna dokumentacja (to znaczy, że URI powinien zachowywać się w ten sposób)? Nie mogłem znaleźć żadnego. –

+0

Czy to [to] (https://tools.ietf.org/html/rfc3986#section-5.2.3)? –

+0

@RovinBhandari - tak, wydaje się, że ten drugi punkt zawiera go - usuwasz wszystkie znaki z prawej strony ostatniego '/' przed dodaniem nowego tekstu. –

3

Zachowanie, które widzisz, jest poprawne, ponieważ zastąpienie ostatniej części jest dobrym pomysłem, jeśli chcesz zmienić nazwę pliku.

Dodałbym odwrotny ukośnik na końcu pierwszej części. Wtedy jasne jest, że jest to katalog, w przeciwnym razie może być interpretowany jako plik.

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

dostanie tego wyjścia:

https://127.0.0.1:8443/svn/CXB1/Validation/branches/test 
Powiązane problemy