22

2つのUriオブジェクトをコードに渡しました。1つはディレクトリで、もう1つはファイル名(または相対パス)です。

var a = new Uri("file:///C:/Some/Dirs");
var b = new Uri("some.file");

私がこれらをこのように組み合わせようとすると:

var c = new Uri(a,b);

私は得る

file:///C:/Some/some.file

ここで、と同じ効果が得られると期待していますPath.Combine(これは、置き換える必要のある古いコードです)。

file:///C:/Some/Dirs/some.file

私はこれに対するきれいな解決策を考えることができません。

醜い解決策は/、URIがない場合にURIに追加することです

string s = a.OriginalString;
if(s[s.Length-1] != '/')
   a = new Uri(s + "/");
4

5 に答える 5

25

これでうまくいくはずです:

var baseUri = new Uri("http://www.briankeating.net");
var absoluteUri = new Uri(baseUri, "/api/GetDefinitions");

このコンストラクターは、標準の相対 URI 規則に従うため、次のこと/が重要です。

  • http://example.net+ foo=http://example.net/foo
  • http://example.net/foo/bar+ baz=http://example.net/foo/baz
  • http://example.net/foo/+ bar=http://example.net/foo/bar
  • http://example.net/foo+ bar=http://example.net/bar
  • http://example.net/foo/bar/+ /baz=http://example.net/baz
于 2012-04-28T16:41:05.427 に答える
5

この拡張方法を試すことができます! 常に動作します!;-)

 public static class StringExtension
    {
        public static string UriCombine(this string str, string param)
        {
            if (!str.EndsWith("/"))
            {
                str = str + "/";
            }
            var uri = new Uri(str);
            return new Uri(uri, param).AbsoluteUri;
        }
    }

アンジェロ、アレッサンドロ

于 2010-05-14T10:27:34.830 に答える
2

最初のURIのスラッシュの終わりを追加すると、URIは複数のスラッシュ(/)を無視します

var a = new Uri("file:///C:/Some/Dirs/");

編集:

var a = new Uri("file:///C:/Some/Dirs");
var b = new Uri("some.file",  UriKind.Relative);
var c = new Uri(Path.Combine(a.ToString(), b.ToString()));
MessageBox.Show(c.AbsoluteUri);
于 2009-05-19T22:42:13.847 に答える
0

Uri から継承してそれを使用しないのはなぜですか。コンストラクターでそれを修正するために何をする必要がありますか? これがアセンブリの内部または手の届く範囲にあると仮定すると、リファクタリングは安価です..

于 2009-05-19T22:56:24.333 に答える