Создание Uri из базы без косой черты и относительных частей - PullRequest
4 голосов
/ 13 октября 2009

У меня проблема с конструктором 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

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

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

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

Ответы [ 2 ]

9 голосов
/ 13 октября 2009

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

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

Это

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

право

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

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

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

0 голосов
/ 13 октября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...