Создание Uri из базы без косой черты и относительных частей

У меня проблема с конструктором Uri. Результаты различаются в зависимости от того, заканчивается ли базовый путь косой чертой или нет.

var baseWithSlash = new Uri("c:\\Temp\\");
var baseNoSlash = new Uri("c:\\Temp");

var relative = "MyApp";

var pathWithSlash = new Uri(baseWithSlash, relative);  // file:///c:/Temp/MyApp
var pathNoSlash = new Uri(baseNoSlash, relative);      // file:///c:/MyApp

Первый результат - тот, который я ожидаю, даже если в базовом пути нет косой черты.

Моя главная проблема заключается в том, что базовый путь исходит от пользовательского ввода.

Каков наилучший способ достижения правильного результата, даже если пользователь указывает путь без косой черты?

13.10.2009 06:03:58
2 ОТВЕТА
РЕШЕНИЕ

Этого следовало ожидать ИМО. В конце концов, рассмотрим URI для «hello.jpg» относительно

 http://foo.com/site/index.html

Это

 http://foo.com/site/hello.jpg

правильно?

Теперь, если вы знаете, что ваш пользователь вводит URI, представляющий каталог, вы можете убедиться, что в конце строки есть косая черта. Проблема возникает, если вы не знаете, вводят ли они имя каталога или нет. Будет ли добавление косой черты, если у вас ее еще нет?

string baseUri = new Uri(userUri + userUri.EndsWith("\\") ? "" : "\\");

Это предполагает (основываясь на вашем примере), что они будут использовать обратную косую черту. В зависимости от ваших конкретных обстоятельств вам может потребоваться обрабатывать и косые черты.

9
13.10.2009 06:10:53
Добавление слеша, если его еще нет, мне подходит. Пользователь может использовать обратную и прямую косую черту - я просто не хотел писать код, который вы написали, но кажется, что это неизбежно. Спасибо!
Konstantin Spirin 13.10.2009 06:37:13
Кстати, интересная заметка о hello.jpg относительно index.html. Я никогда не смотрел на этот угол.
Konstantin Spirin 13.10.2009 06:40:30

Убедитесь, что первая часть имеет косую черту (то есть: проверьте ее).

0
13.10.2009 06:06:20