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;
}
}
悲しいことに、これは動作しません。
出典
2009-06-24 15:26:52
Kev
Kev、迅速かつ徹底的な答えに感謝します! –
問題ありません。私はこの日のうちに生きて息を吸います。 :) – Kev
この行のため、新しいDirectoryEntry( "IIS:// Localhost/W3SVC/1/root")は、アプリケーションがデフォルトのWebサイトにインストールされている場合にのみ機能します(1は番号既定のWebサイトに帰属します)。アプリケーションが別のWebサイトにインストールされている場合、その番号は異なります。 – joerage