相対URLから絶対URLを、あるいは絶対URLから相対URLを決定するのは、自力では大変です。しかし.NET Frameworkでは、Uriクラスを使うと簡単にできます。ここではその方法を紹介します。
まずは、相対URLから絶対URLを取得する方法を紹介します。下の例では、「http://www.dobon.net/vb/」を基準にした時の「top.html」の絶対URLを取得しています。
'基準になるURLのUriオブジェクトを作成する Dim u1 As New Uri("http://www.dobon.net/vb/") 'u1を基にして、相対URL"top.html"のUriオブジェクトを作成する Dim u2 As New Uri(u1, "top.html") 'u2の絶対URLを表示する Console.WriteLine(u2.AbsoluteUri) '結果: "http://www.dobon.net/vb/top.html"
//基準になるURLのUriオブジェクトを作成する Uri u1 = new Uri("http://www.dobon.net/vb/"); //u1を基にして、相対URL"top.html"のUriオブジェクトを作成する Uri u2 = new Uri(u1, "top.html"); //u2の絶対URLを表示する Console.WriteLine(u2.AbsoluteUri); //結果: "http://www.dobon.net/vb/top.html"
基準URLと相対URLをいろいろ変更した時、上記の方法では絶対URLがどのようになるかを調べた結果を以下に示します。
基準となるURL | 相対URL | 取得される絶対URL |
---|---|---|
http://www.dobon.net/vb/ | t.gif | http://www.dobon.net/vb/t.gif |
http://www.dobon.net/vb/ | dt/i.htm | http://www.dobon.net/vb/dt/i.htm |
http://www.dobon.net/vb/ | ../i.htm | http://www.dobon.net/i.htm |
http://www.dobon.net/vb/ | /t.gif | http://www.dobon.net/t.gif |
http://www.dobon.net/vb/ | ./i.htm | http://www.dobon.net/vb/i.htm |
http://www.dobon.net/vb/ | http://www.microsoft.com/ | http://www.microsoft.com/ |
http://www.dobon.net/vb/ | http://www.dobon.net | (エラー) |
http://www.dobon.net/vb/ | http://www.dobon.net/katte/ | (エラー) |
http://www.dobon.net/vb/ | http://vb.dobon.net/ | (エラー) |
http://www.dobon.net/vb/i.htm | ../i.htm | http://www.dobon.net/i.htm |
http://www.dobon.net/vb | ../i.htm | http://www.dobon.net/../i.htm |
絶対URLから相対URLを取得するには、UriクラスのMakeRelativeUriメソッド(.NET Framework 1.1以前は、MakeRelativeメソッド)を使います。以下の例では、「http://www.dobon.net/vb/」を基にした「http://www.dobon.net/vb/dotnet/index.html」の相対URLを取得しています。
Dim u1 As New Uri("http://www.dobon.net/vb/") Dim u2 As New Uri("http://www.dobon.net/vb/dotnet/index.html") 'u1を基にしたu2の相対URLを表すUriオブジェクトを作成する Dim relativeUri As Uri = u1.MakeRelativeUri(u2) '相対URLを取得する Dim relativeUrl As String = relativeUri.ToString() '.NET Framework 1.1以前では次のようにする 'Dim relativeUrl As String = u1.MakeRelative(u2) Console.WriteLine(relativeUrl) '結果: dotnet/index.html
Uri u1 = new Uri("http://www.dobon.net/vb/"); Uri u2 = new Uri("http://www.dobon.net/vb/dotnet/index.html"); //u1を基にしたu2の相対URLを表すUriオブジェクトを作成する Uri relativeUri = u1.MakeRelativeUri(u2); //相対URLを取得する string relativeUrl = relativeUri.ToString(); //.NET Framework 1.1以前では次のようにする //string relativeUrl = u1.MakeRelative(u2); Console.WriteLine(relativeUrl); //結果: dotnet/index.html
基準URLと絶対URLをいろいろと変更して、どのように相対URLが取得されるかを調べた結果を以下に示します。
基準となるURL | 絶対URL | 取得される相対URL |
---|---|---|
http://dobon.net/vb/ | http://dobon.net/vb/dt/i.htm | dotnet/i.htm |
http://dobon.net/vb/dt/i.htm | http://dobon.net/vb/ | ../ |
http://dobon.net/vb/ | http://dobon.net/vb/dt/i.htm | dotnet/i.htm |
http://dobon.net/vb/dt/i.htm | http://dobon.net/vb | ../../vb |
http://dobon.net/vb | http://dobon.net/vb/dt/i.htm | vb/dt/i.htm |
http://dobon.net/vb/dt/i.htm | http://dobon.net/katte/top.jpg | ../../katte/top.jpg |
http://dobon.net/katte/top.jpg | http://dobon.net/vb/dt/i.htm | ../vb/dt/i.htm |
http://dobon.net/vb/dt/i.htm | http://www.microsoft.com | http://www.microsoft.com/ |
http://www.microsoft.com | http://dobon.net/vb/dt/i.htm | http://dobon.net/vb/dt/i.htm |
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。