在我试图进一步面向未来的一个项目,我想找到检索使用C#中的web目录,并在不知道的文件名可能Web服务器的列表中的完整路径和索引/默认页面的文件名的最佳方式。
'使用Server.Mappath( “/测试/”)' 给出我 'C:\ WWW \测试\'
...所以呢: '使用Server.Mappath(Page.ResolveUrl( “/测试/”))'
......但我需要 'C:\ WWW \测试\ index.html的'。
有谁知道检索,该Web服务器将成为当有人浏览到该目录下的文件名的现有方法的 - 或者是Default.aspx的,或index.html,或什么?
感谢您的帮助,饲料
ASP.NET有没有这方面的知识。 您需要查询IIS默认文档列表。
这样做的原因是,IIS会看在你的网页文件夹中第一个匹配的文件中的IIS默认文档列表中,然后移交给匹配的ISAPI扩展脚本映射该文件类型(按扩展名)。
为了获得默认文档列表中,您可以执行以下操作(使用默认网站作为一个例子,其中IIS总数= 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环境是这是不行的(例如共同主办)。