C # /. NET Server Путь к странице по умолчанию / индекс
Вопрос
Пытаясь продвинуть проект на будущее, я пытаюсь найти наилучший способ получения полного пути и имени файла страницы index / default в веб-каталоге с использованием C # и не зная списка возможностей файла для веб-сервера. . р>
«Server.MapPath (" / test / ")» дает мне «C: \ www \ test \»
... так же: 'Server.MapPath (Page.ResolveUrl (" / test / ")) "
... но мне нужно "C: \ www \ test \ index.html".
Кто-нибудь знает о существующем методе получения имени файла, которое веб-сервер будет использовать, когда кто-нибудь просматривает этот каталог - будь то default.aspx, index.html или что-то еще?
Спасибо за любую помощь, кормовая р>
Решение
ASP.NET не знает об этом. Вам нужно будет запросить IIS для списка документов по умолчанию.
Причиной этого является то, что IIS будет искать в вашей веб-папке первый соответствующий файл в списке документов IIS по умолчанию, а затем передавать соответствие соответствующему расширению ISAPI для этого типа файла (по расширению) в сопоставлениях сценариев. р>
Чтобы получить список документов по умолчанию, вы можете сделать следующее (используя веб-сайт по умолчанию в качестве примера, где IIS Number = 1):
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 с частичным доверием (например, общий хостинг).