Конструктор Uri (Uri, String) работает неправильно?

Вот часть моего кода:

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

Я ожидаю, что testBranches будет https://127.0.0.1:8443/svn/CXB1/Validation/branches/test, но это https://127.0.0.1:8443/svn/CXB1/Validation/test. Я не могу понять, почему конструктор Uri (Uri, string) ест последнюю часть пути.

3 ответа

Добавить косую черту после ветвей

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


Поведение, которое вы видите, является правильным, потому что замена последней части является хорошей идеей, если вы хотите изменить имя файла.

Я бы добавил обратную косую черту в конце первой части. Тогда ясно, что это каталог, иначе он может быть интерпретирован как файл.

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

Получит этот результат:

https://127.0.0.1:8443/svn/CXB1/Validation/branches/test


Это ожидаемое поведение.

Если в браузере вы были на странице с полным URI в качестве https://127.0.0.1:8443/svn/CXB1/Validation/branches, и если на этой странице вы нажали ссылку, которая имела только href из test, вы попали бы в https://127.0.0.1:8443/svn/CXB1/Validation/test. Вот как относительный URI составлен с базовым URI.

С другой стороны, если первый URI закончился с /, тогда он будет работать так, как вы ожидали.

licensed under cc by-sa 3.0 with attribution.