4

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

最初の結果は、ベースパスにスラッシュがない場合でも期待する結果です。

私の主な問題は、ベースパスがユーザー入力から来ることです。

ユーザーがスラッシュなしでパスを指定した場合でも、正しい結果を達成するための最良の方法は何ですか?

4

2 に答える 2

9

これは予想されるIMOです。結局のところ、「hello.jpg」のURIを

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

これは

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

右?

これで、ユーザーがディレクトリを表すURIを入力していることがわかっている場合は、文字列の末尾にスラッシュが付いていることを確認できます。問題は、彼らがディレクトリ名を入力しているかどうかわからない場合に発生します。まだ有効なスラッシュがない場合は、スラッシュを追加するだけですか?

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

これは、(例に基づいて)バックスラッシュを使用することを前提としています。正確な状況によっては、スラッシュも処理する必要がある場合があります。

于 2009-10-13T06:10:53.503 に答える
0

最初の部分にスラッシュが付いていることを確認します(つまり、それを確認します)。

于 2009-10-13T06:06:20.233 に答える