ASP.NET Web サイトのパス

Visual Studio 2010

更新 : 2007 年 11 月

Web サイトのリソースを使用するときは、リソースのパスを指定する必要があります。たとえば、URL パスを使用して、ページのイメージ ファイルや Web サイトの他の場所のページの URL を参照することがあります。同様に、Web アプリケーションのコードで、サーバー ベースのファイルへの物理ファイル パスを使用してファイルを読み書きすることがあります。ASP.NET には、リソースを参照したり、アプリケーションのページまたはその他のリソースへのパスを指定したりするための機能が用意されています。

多くの場合、ページの要素やコントロールは、ファイルなどの外部リソースを参照する必要があります。ASP.NET は外部リソースを参照する多様なメソッドをサポートしています。使用する参照メソッドは、クライアント側要素と Web サーバー コントロールのどちらを使用するかによって異なります。

クライアント要素

Web サーバー コントロールではないページの要素 (クライアント要素) は、そのままブラウザに渡されます。したがって、クライアント要素からリソースを参照する場合は、HTML の URL の標準規則に従ってパスを指定します。完全修飾 (絶対とも呼ばれます) URL パスまたは各種の相対パスを使用できます。たとえば、ページにある img 要素の src 属性は、次のいずれかのパスを使用して設定できます。

  • 絶対 URL パス : 絶対 URL パスは、外部 Web サイトなどの別の場所のリソースを参照する場合に便利です。

    <img src="http://www.contoso.com/MyApplication/Images/SampleImage.jpg" />
    
  • アプリケーションのルートに対してではなくサイトのルートに対して解決されるサイト ルート相対パス。サイト ルート相対パスは、Web サイトのルートの下のフォルダに、イメージやクライアント スクリプト ファイルなどのアプリケーション間にまたがるリソースを格納している場合に便利です。

    この例のパスでは、Image フォルダは Web サイト ルートの下にあると想定しています。

    <img src="/Images/SampleImage.jpg" />
    

    Web サイトが http://www.contoso.com の場合、このパスは次のように解決されます。

    http://www.contoso.com/Images/SampleImage.jpg
    
  • 現在のページ パスに対して解決される相対パス。

    <img src="Images/SampleImage.jpg" />
    
  • 現在のページ パスのピアとして解決される相対パス。

    <img src="../Images/SampleImage.jpg" />
    
    ms178116.alert_note(ja-jp,VS.100).gifメモ :

    既定では、ブラウザは現在のページの URL をベースとして使用して相対パスを解決します。ただし、ページに HTML base 要素を追加して代替ベース パスを指定できます。

サーバー コントロール

リソースを参照する ASP.NET サーバー コントロールでは、クライアント要素と同様に絶対パスと相対パスを使用できます。相対パスを使用すると、それらはページ、ユーザー コントロール、またはコントロールが含まれるテーマのパスに対して相対的に解決されます。たとえば、ユーザー コントロールが Controls フォルダにあるとします。このユーザー コントロールには Image Web サーバー コントロールがあり、その ImageUrl プロパティは Images/SampleImage.jpg というパスに設定されています。

このユーザー コントロールを実行すると、パスは /Controls/Images/SampleImage.jpg に解決されます。これは、ユーザー コントロールをホストするページの場所に関係なく該当します。

ms178116.alert_note(ja-jp,VS.100).gifメモ :

マスタ ページでは、リソースへのパスはコンテンツ ページのパスに基づいて解決されます。詳細については、「ASP.NET マスター ページの概要」を参照してください。

サーバー コントロールの絶対パスと相対パスの参照には、次のような短所があります。

  • 絶対パスは、アプリケーション間で移植できません。絶対パスが指すアプリケーションを移動すると、リンクが切断されます。

  • リソースやページを別のフォルダに移動すると、クライアント要素のスタイルの相対パスの維持が困難になります。

このような短所を克服するために、ASP.NET では Web アプリケーションのルート演算子 (~) があります。この演算子は、サーバー コントロールでパスを指定する際に使用できます。ASP.NET は、~ 演算子を現在のアプリケーションのルートに解決します。~ 演算子をフォルダと共に使用すると、現在のルートに基づいたパスを指定できます。

Image サーバー コントロールを使用するときに、イメージのルート相対パスを指定するために使用する ~ 演算子の例を次に示します。この例では、イメージ ファイルは Images フォルダから読み取られます。Images フォルダは Web アプリケーションのルート直下にあります。これは、Web サイトのページの場所に関係ありません。

<asp:image runat="server" id="Image1"
  ImageUrl="~/Images/SampleImage.jpg" />

~ 演算子は、サーバー コントロールのパスに関連するすべてのプロパティで使用できます。~ 演算子が認識されるのは、サーバー コントロールとサーバー コードのみです。~ 演算子をクライアント要素に使用することはできません。

ms178116.alert_note(ja-jp,VS.100).gifメモ :

モバイル ページのみの場合、アプリケーションが Cookie なしのセッションに依存するとき、または Cookie なしのセッションを必要とするモバイル デバイスからの要求を受信する可能性があるとき、パスにチルダ ("~") を使用すると、誤って新規セッションが作成され、セッション データが失われる可能性があります。チルダを含むパス ("~/path" など) でモバイル コントロールのプロパティを設定するには、プロパティに割り当て前に、ResolveUrl メソッドを使用してパスを解決します。

アプリケーションで、サーバー上のファイルまたはその他のリソースのパスが必要になる場合があります。たとえば、アプリケーションがプログラムによってテキスト ファイルを読み書きする場合、メソッドにファイルの完全な物理パスを提供する必要があります。

アプリケーションを移動または配置するとパスが変化することがあるので、アプリケーションに C: \Website\MyApplication などの物理ファイル パスをハードコーディングすることはお勧めしません。ただし、ASP.NET にはアプリケーションでプログラム的に任意の物理ファイル パスを取得する方法があります。これによって、ベース ファイル パスを使用して必要なリソースへの完全パスを作成できます。ファイル パスを決定するために一般的に使用される ASP.NET の機能には 2 つあります。パス情報を返す HttpRequest オブジェクトのプロパティ、および MapPath メソッドです。

ms178116.alert_note(ja-jp,VS.100).gifメモ :

物理ファイル パスは、悪意のあるユーザーがアプリケーションに関する情報を取得するために使用する可能性があるので、クライアントに送信しないでください。

要求プロパティからのパスの決定

アプリケーションのリソースのパスを決定するために使用する HttpRequest オブジェクトのプロパティを次の表に示します。

この表の例は、次の前提に基づいています。

  • ブラウザの要求は http://www.contoso.com/MyApplication/MyPages/Default.aspx という URL を使用して行われました。

  • "仮想パス" はサーバー識別子の後の要求 URL 部分を意味するものとします。この場合の仮想パスは /MyApplication/MyPages/Default.aspx です。

  • Web サイトのルートの物理パスは、C:\inetpub\wwwroot\MyApplication\ です。

  • 物理パスには MyPages というフォルダが含まれます。

プロパティ

説明

ApplicationPath

行われる要求がアプリケーションのどこにあるかにかかわらず、現在のアプリケーションのルート パスを取得します。この例では、プロパティは / を返します。

CurrentExecutionFilePath

現在の要求の仮想パスを取得します。要求がサーバー コードでリダイレクトされている場合、CurrentExecutionFilePath が正しいという点で FilePath プロパティとは異なります。この例では、プロパティは /MyApplication/MyPages/Default.aspx を返します。

Transfer または Execute の呼び出しの結果として実行中のコードでこのプロパティを受け取る場合、パスはコードの場所を反映します。

FilePath

現在の要求の仮想パスを取得します。この例では、プロパティは /MyApplication/MyPages/Default.aspx を返します。

CurrentExecutionFilePath とは異なり、FilePath はサーバー側転送を反映しません。

Path

現在の要求の仮想パスを取得します。この例では、プロパティは /MyApplication/MyPages/default.aspx を返します。

PhysicalApplicationPath

現在実行中のアプリケーションのルート ディレクトリの物理的なファイル システム パスを取得します。この例では、プロパティは C:\inetpub\wwwroot\ を返します。

PhysicalPath

要求された URL に対応する物理的なファイル システム パスを取得します。この例では、プロパティは C:\inetpub\wwwroot\MyApplication\MyPages\default.aspx を返します。

MapPath メソッドの使用

MapPath メソッドは、メソッドに渡す仮想パスの完全な物理パスを返します。たとえば、次のコードは Web サイトのルートのファイル パスを返します。

String rootPath = Server.MapPath("~");
ms178116.alert_note(ja-jp,VS.100).gifメモ :

MapPath メソッドに渡されるパスは、絶対パスではなくアプリケーションの相対パスである必要があります。

表示: