C#/。NET服务器路径默认/索引页(C#/.NET Server Path to default/

2019-09-16 21:23发布

在我试图进一步面向未来的一个项目,我想找到检索使用C#中的web目录,并在不知道的文件名可能Web服务器的列表中的完整路径和索引/默认页面的文件名的最佳方式。

'使用Server.Mappath( “/测试/”)' 给出我 'C:\ WWW \测试\'

...所以呢: '使用Server.Mappath(Page.ResolveUrl( “/测试/”))'

......但我需要 'C:\ WWW \测试\ index.html的'。

有谁知道检索,该Web服务器将成为当有人浏览到该目录下的文件名的现有方法的 - 或者是Default.aspx的,或index.html,或什么?

感谢您的帮助,饲料

Answer 1:

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环境是这是不行的(例如共同主办)。



文章来源: C#/.NET Server Path to default/index page