📒

.NET の Uri 連結でハマった

2021/10/19に公開

やりたかった事

http://hoge.com/fugapiyo を連結して、http://hoge.com/fuga/piyo を得たかった。

書いたコード1

var uri1 = new Uri(new Uri("http://hoge.com/fuga"), "/piyo");
Console.WriteLine($"URI1: {uri1}");

得られた(期待しない)結果1

URI1: http://hoge.com/piyo

書いたコード2

var uri2 = new Uri(new Uri("http://hoge.com/fuga/"), "/piyo");
Console.WriteLine($"URI2: {uri2}");

得られた(期待しない)結果2

URI2: http://hoge.com/piyo

書いたコード3

var uri3 = new Uri(new Uri("http://hoge.com/fuga"), "piyo");
Console.WriteLine($"URI3: {uri3}");

得られた(期待しない)結果3

URI3: http://hoge.com/piyo

書いたコード4

var uri4 = new Uri(new Uri("http://hoge.com/fuga/"), "piyo");
Console.WriteLine($"URI4: {uri4}");

得られた(期待通りの)結果4

URI4: http://hoge.com/fuga/piyo

得られた教訓

連結元の Uri は末尾を / にしないとロクなことにならない!!

piyopiyo/ と書くように一貫性を持たせた方がよさそう。

var uri5 = new Uri(new Uri("http://hoge.com/fuga/"), "piyo/");
Console.WriteLine($"URI5: {uri5}");

Try .NET が便利だった。

Discussion