Home > C# > 目的別 > Web関連

C#で、相対uriを絶対uriを相互変換する

新規作成日 2017-01-30
最終更新日

ローカルディスクに、ローカルサイトを配置していると混乱しますが、相対パスと相対uriは、区別されているので、注意して下さい。

htmlファイルで、使用するファイルの相対位置は、相対uriとして、考えて下さい。

基準Uriと相対uriから、絶対uriを取得する

基準Uriと相対uriから、絶対uriを取得するためには、Uri.AbsoluteUri プロパティを使用します。

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を入力してい「相対URIを取得」ボタンを押すと相対URIが得られます。

コードPassExchange.zipをダウンロード

このエントリーをはてなブックマークに追加

Home PC C# Illustration

Copyright (C) 2011 Horio Kazuhiko(kukekko) All Rights Reserved.
kukekko@gmail.com
ご連絡の際は、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません。」