DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

要素を合成してURLを作成する

UriBuilderクラス(System名前空間)を使用すると、スキーム、ドメイン名、ポート番号、パス、クエリ文字列等を合成してURL(URI)を作成することが出来ます。作成されたUriオブジェクトは、UriBuilder.Uriプロパティで取得できます。

以下に、スキーム「http」、ドメイン名「www.dobon.net」、ポート番号「80」、パス「vb/dotnet%20tips.html」、クエリ文字列「?id=ABC&n=10」を連結してURL(URI)を作成する例を示します。

VB.NET
コードを隠すコードを選択
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
C#
コードを隠すコードを選択
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プロパティの値に近いようです。

URLの一部を変更する

UriBuilderクラスを使用すると、URL(URI)の一部(スキーム、ドメイン名、ポート番号、パス、クエリ文字列等)のみを簡単に変更することが出来ます。UriオブジェクトではURLの一部のみを変更することができませんので、UriBuilderクラスを使うと便利です。

以下にUriオブジェクトの一部を変更する例を示します。

VB.NET
コードを隠すコードを選択
'基になる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
C#
コードを隠すコードを選択
//基になる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で修正されたようです。

  • 履歴:
  • 2009/1/8 説明をより詳しくした。
  • 2015/6/26 説明文とサンプルのパスが異なっていたのを修正。ユーザー名とパスワードを変更してもUriBuilder.Uriプロパティに反映されない不具合が.NET Framework 4.0で修正されたことを追記。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。