新規作成日 2017-01-30
最終更新日
ローカルディスクに、ローカルサイトを配置していると混乱しますが、相対パスと相対uriは、区別されているので、注意して下さい。
htmlファイルで、使用するファイルの相対位置は、相対uriとして、考えて下さい。
基準Uriと相対uriから、絶対uriを取得する
基準Uriと相対uriから、絶対uriを取得するためには、Uri.AbsoluteUri プロパティを使用します。
msdnで紹介されている使用例は、以下のコードです。
使用例
Uri baseUri= new Uri("http://www.contoso.com");
Uri myUri = new Uri(baseUri,"catalog/shownew.htm?date=today");
Console.WriteLine(myUri.AbsoluteUri);
実行結果
http://www.contoso.com/catalog/shownew.htm?date=today
Uriクラスで扱うと、内部のuriは、特定の文字がエスケープされて格納されています。それにより、uriの比較をする場合、同じuriが別のものと判断される可能性があることに注意して下さい。
基準Uriと絶対uriから、相対uriを取得する
相対uriを作成するには、uriクラスのMakeRelativeUriメソッドを使用します。
Uri.MakeRelativeUri メソッド (Uri)
次のコードは、msdnで紹介されている使用例をコンソールアプリケーションにしたコードです。(ほぼ、使用例そのままです。)
using System;
namespace RelativeUri
{
class Program
{
static void Main(string[] args)
{
// Create a base Uri.
// 基準Urlを作成する
Uri address1 = new Uri("http://www.contoso.com/");
// Create a new Uri from a string.
// 新しいUrlを文字列から作成する
Uri address2 = new Uri("http://www.contoso.com/index.htm?date=today");
// Determine the relative Uri.
// 相対Urlを判断する
Console.WriteLine("The difference is {0}", address1.MakeRelativeUri(address2));
// IDEで実行した際に、コンソールを閉じないようにする
Console.WriteLine("\n");
Console.WriteLine("何かキーを押すと終了します。");
Console.ReadKey();
}
}
}
実行結果は、
index.htm?date=today
です。
C#のWPFで、相対uriを絶対uriを相互変換するアプリケーションを作成する
それでは、これらの情報を参考に、WPFアプリケーションを作成しましょう。
まずは、UIウィンドウを作成します。
MainWindow.xamlを以下のコードを参考に変更して下さい。
<Window x:Class="PassExchange.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="URLの変換" Height="120" Width="400">
<StackPanel>
<DockPanel>
<Label Width="60">基準URI</Label>
<TextBox Name="BaseUri"></TextBox>
</DockPanel>
<DockPanel>
<Label Width="60" DockPanel.Dock="Left">相対URI</Label>
<Button Width="100"
HorizontalAlignment="Right"
DockPanel.Dock="Right"
Click="Button_Click">絶対URIを取得</Button>
<TextBox Name="relUri"></TextBox>
</DockPanel>
<DockPanel>
<Label Width="60" DockPanel.Dock="Left">絶対URI</Label>
<Button Width="100"
HorizontalAlignment="Right"
DockPanel.Dock="Right"
Click="Button_Click_1">相対URIを取得</Button>
<TextBox Name="absUri"></TextBox>
</DockPanel>
</StackPanel>
</Window>
MainWindow.xaml.csを以下のコードを参考に変更して下さい。
using System;
using System.Windows;
namespace PassExchange
{
/// <summary>
/// MainWindow.xaml の相互作用ロジック
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
BaseUri.Text = @"https://webdesign.vdlz.xyz/index.html";
relUri.Text = @"Editor/Editor.html";
}
private void Button_Click(object sender, RoutedEventArgs e)
{
//基準uriを取得する
if (BaseUri.Text != "")
{
Uri myBaseUri = new Uri(BaseUri.Text);
if (relUri.Text != "")
{
// 絶対uriを取得する
Uri myUri = new Uri(myBaseUri, relUri.Text);
absUri.Text = myUri.AbsoluteUri;
}
}
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
//基準uriを取得する
Uri myBaseUri = new Uri(BaseUri.Text);
if (absUri.Text != "")
{
Uri myAbsUri = new Uri(absUri.Text);
// 相対uriを取得する
Uri myRelUri = myBaseUri.MakeRelativeUri(myAbsUri);
relUri.Text = myRelUri.ToString();
}
}
}
}
実行結果
基準URIと相対URIを入力して、「絶対URIを取得」ボタンを押すと絶対URIが得られます。基準URIと絶対URIを入力してい「相対URIを取得」ボタンを押すと相対URIが得られます。