2009-06-24 3 views
1

プロジェクトの将来性をさらに高めるために、Webディレクトリのインデックス/既定ページのフルパスとファイル名を取得するための最良の方法を見つけようとしています。 C#とWebサーバーのファイル名の可能性のリストを知らなくても。C#/ .Netサーバーのデフォルト/インデックスページへのパス

'Server.MapPathの( "/テスト/")' 私に 'C:\ WWW \テスト\' 与える...

をそう:「Server.MapPathの(Page.ResolveUrl( "/テスト/ ")) '

...' C:\ www \ test \ index.html 'が必要です。

ウェブサーバーが誰かがそのディレクトリをブラウズするときにファイル名を取得する既存の方法を知っている人はいますか?default.aspx、index.htmlなどですか?任意の助け

おかげで、 飼料

答えて

5

ASP.NETはこれを認識しません。既定のドキュメントリストをIISに照会する必要があります。

これは、IISがIISの既定のドキュメントリスト内の最初に一致するファイルをWebフォルダ内で検索し、そのファイルの種類(拡張子)の一致するISAPI拡張子にスクリプトのマッピングで渡すためです。あなたは(IIS番号= 1の例として、既定のWebサイトを使用して)次の操作を行うことができ、既定のドキュメントの一覧を取得するには

using System; 
using System.DirectoryServices; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      using (DirectoryEntry w3svc = 
       new DirectoryEntry("IIS://Localhost/W3SVC/1/root")) 
      { 
       string[] defaultDocs = 
        w3svc.Properties["DefaultDoc"].Value.ToString().Split(','); 

      } 
     } 
    } 
} 

それは、その後にdefaultDocs配列を反復した場合だろうどのファイルがフォルダ内に存在するかを見ると、最初の一致がデフォルトの文書になります。たとえば:あなたは部分信頼ASP.NET環境(例えば、共有ホスティング)にいる場合

// Call me using: string doc = GetDefaultDocument("/"); 
public string GetDefaultDocument(string serverPath) 
{ 

    using (DirectoryEntry w3svc = 
     new DirectoryEntry("IIS://Localhost/W3SVC/1/root")) 
    { 
     string[] defaultDocs = 
      w3svc.Properties["DefaultDoc"].Value.ToString().Split(','); 

     string path = Server.MapPath(serverPath); 

     foreach (string docName in defaultDocs) 
     { 
      if(File.Exists(Path.Combine(path, docName))) 
      { 
       Console.WriteLine("Default Doc is: " + docName); 
       return docName; 
      } 
     } 
     // No matching default document found 
     return null; 
    } 
} 

悲しいことに、これは動作しません。

+0

Kev、迅速かつ徹底的な答えに感謝します! –

+0

問題ありません。私はこの日のうちに生きて息を吸います。 :) – Kev

+0

この行のため、新しいDirectoryEntry( "IIS:// Localhost/W3SVC/1/root")は、アプリケーションがデフォルトのWebサイトにインストールされている場合にのみ機能します(1は番号既定のWebサイトに帰属します)。アプリケーションが別のWebサイトにインストールされている場合、その番号は異なります。 – joerage

関連する問題