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

相対URLから絶対URLを取得する、絶対URLから相対URLを取得する

相対URLから絶対URLを、あるいは絶対URLから相対URLを決定するのは、自力では大変です。しかし.NET Frameworkでは、Uriクラスを使うと簡単にできます。ここではその方法を紹介します。

相対URLから絶対URLを取得する

まずは、相対URLから絶対URLを取得する方法を紹介します。下の例では、「http://www.dobon.net/vb/」を基準にした時の「top.html」の絶対URLを取得しています。

VB.NET
コードを隠すコードを選択
'基準になる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"
C#
コードを隠すコードを選択
//基準になる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を取得する

絶対URLから相対URLを取得するには、UriクラスのMakeRelativeUriメソッド(.NET Framework 1.1以前は、MakeRelativeメソッド)を使います。以下の例では、「http://www.dobon.net/vb/」を基にした「http://www.dobon.net/vb/dotnet/index.html」の相対URLを取得しています。

VB.NET
コードを隠すコードを選択
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
C#
コードを隠すコードを選択
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
https://dobon.net/vb/ https://dobon.net/vb/dt/i.htm dotnet/i.htm
https://dobon.net/vb/dt/i.htm https://dobon.net/vb/ ../
https://dobon.net/vb/ https://dobon.net/vb/dt/i.htm dotnet/i.htm
https://dobon.net/vb/dt/i.htm https://dobon.net/vb ../../vb
https://dobon.net/vb https://dobon.net/vb/dt/i.htm vb/dt/i.htm
https://dobon.net/vb/dt/i.htm https://dobon.net/katte/top.jpg ../../katte/top.jpg
https://dobon.net/katte/top.jpg https://dobon.net/vb/dt/i.htm ../vb/dt/i.htm
https://dobon.net/vb/dt/i.htm http://www.microsoft.com http://www.microsoft.com/
http://www.microsoft.com https://dobon.net/vb/dt/i.htm https://dobon.net/vb/dt/i.htm
  • 履歴:
  • 2006/11/20 表を追加。
  • 2007/1/24 .NET Framework 2.0に関する記述を追加。

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

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