UriBuilderクラス(System名前空間)を使用すると、スキーム、ドメイン名、ポート番号、パス、クエリ文字列等を合成してURL(URI)を作成することが出来ます。作成されたUriオブジェクトは、UriBuilder.Uriプロパティで取得できます。
以下に、スキーム「http」、ドメイン名「www.dobon.net」、ポート番号「80」、パス「vb/dotnet%20tips.html」、クエリ文字列「?id=ABC&n=10」を連結してURL(URI)を作成する例を示します。
Dim ub As New UriBuilder( _ "http", "www.dobon.net", 80, "vb/dotnet%20tips.html", "?id=ABC&n=10") Console.WriteLine(ub.ToString()) '結果: http://www.dobon.net:80/vb/dotnet%20tips.html?id=ABC&n=10 Console.WriteLine(ub.Uri.ToString()) '結果: http://www.dobon.net/vb/dotnet tips.html?id=ABC&n=10
UriBuilder ub = new UriBuilder( "http", "www.dobon.net", 80, "vb/dotnet%20tips.html", "?id=ABC&n=10"); Console.WriteLine(ub.ToString()); //結果: http://www.dobon.net:80/vb/dotnet%20tips.html?id=ABC&n=10 Console.WriteLine(ub.Uri.ToString()); //結果: http://www.dobon.net/vb/dotnet tips.html?id=ABC&n=10
上の例のように、UriBuilder.ToStringメソッドとUri.ToStringメソッドの結果が異なる場合があります。Uri.ToStringメソッドはスキームの既定ポートと同じであればポートを含めませんが、UriBuilder.ToStringメソッドは含めます。また、Uri.ToStringメソッドではURLエンコードをデコード(URLエスケープを解除)しますが、UriBuilder.ToStringではしません。
UriBuilder.ToStringメソッドが返す文字列は、.NET Framework 2.0から追加されたUri.OriginalStringプロパティの値に近いようです。
UriBuilderクラスを使用すると、URL(URI)の一部(スキーム、ドメイン名、ポート番号、パス、クエリ文字列等)のみを簡単に変更することが出来ます。UriオブジェクトではURLの一部のみを変更することができませんので、UriBuilderクラスを使うと便利です。
以下にUriオブジェクトの一部を変更する例を示します。
'基になるUriオブジェクト Dim uri As New Uri("http://www.dobon.net:80/vb/dotnet%20tips.html?id=ABC&n=10") 'UriオブジェクトからUriBuilderを作成する Dim ub As New UriBuilder(uri) 'パスを変更する ub.Path = "vb/bbs.html" Console.WriteLine(ub.ToString()) '結果: http://www.dobon.net:80/vb/bbs.html?id=ABC&n=10 Console.WriteLine(ub.Uri.ToString()) '結果: http://www.dobon.net/vb/bbs.html?id=ABC&n=10
//基になるUriオブジェクト Uri uri = new Uri("http://www.dobon.net:80/vb/dotnet%20tips.html?id=ABC&n=10"); //UriオブジェクトからUriBuilderを作成する UriBuilder ub = new UriBuilder(uri); //パスを変更する ub.Path = "vb/bbs.html"; Console.WriteLine(ub.ToString()); //結果: http://www.dobon.net:80/vb/bbs.html?id=ABC&n=10 Console.WriteLine(ub.Uri.ToString()); //結果: http://www.dobon.net/vb/bbs.html?id=ABC&n=10
.NET Framework 3.5までは、UserNameとPasswordプロパティで変更したユーザー名とパスワードがUriBuilder.Uriプロパティの結果に反映されないという不具合がありました。この不具合は、.NET Framework 4.0で修正されたようです。
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。