デフォルト/インデックスページへのC#/。NETサーバーパス
質問
プロジェクトの将来性をさらに高めるために、C#を使用し、Webサーバーのファイル名のリストを知らずに、Webディレクトリ内のインデックス/デフォルトページのフルパスとファイル名を取得する最良の方法を見つけようとしています。 。
'Server.MapPath(" / test /")'は、「C:\ www \ test \」を提供します
... so does: 'Server.MapPath(Page.ResolveUrl(" / test /"))'
...しかし、「C:\ www \ test \ index.html」が必要です。
default.aspx、index.html、その他何でも、誰かがそのディレクトリを閲覧したときにウェブサーバーが提供するファイル名を取得する既存の方法を知っていますか?
ご協力ありがとうございます。 飼料
解決
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
配列を反復処理して、フォルダー内にどのファイルが存在するかを確認します。最初に一致したのはデフォルトのドキュメントです。例:
// 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;
}
}
部分信頼ASP.NET環境(共有ホスティングなど)にいる場合、残念ながらこれは機能しません。