Question

Dans ma tentative de pérenniser un projet, j'essaie de trouver le meilleur moyen de récupérer le chemin complet et le nom de fichier de la page d'index / default dans un répertoire Web à l'aide de C # sans connaître la liste des possibilités de nom de fichier du serveur Web. .

"Server.MapPath (" / test / ")" me donne "C: \ www \ test \ '

... il en va de même: 'Server.MapPath (Page.ResolveUrl ("/ test /")) "'

... mais j'ai besoin de 'C: \ www \ test \ index.html'.

Quelqu'un a-t-il connaissance d'une méthode existante permettant de récupérer le nom du fichier que le serveur Web servira lorsqu'une personne accède à ce répertoire - qu'il s'agisse de default.aspx, index.html ou autre?

Merci pour toute aide, fourrage

Était-ce utile?

La solution

ASP.NET n’a pas connaissance de cela. Vous devez interroger IIS pour obtenir la liste de documents par défaut.

La raison en est que IIS recherchera dans votre dossier Web le premier fichier correspondant dans la liste de documents par défaut d'IIS, puis passera à l'extension ISAPI correspondante pour ce type de fichier (par extension) dans les mappages de script.

Pour obtenir la liste de documents par défaut, procédez comme suit (en utilisant comme exemple le site Web par défaut avec un numéro 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(',');

            }
        }
    }
}

Il faudrait alors itérer le tableau defaultDocs pour voir quel fichier existe dans le dossier, la première correspondance est le document par défaut. Par exemple:

// 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;
    }
}

Malheureusement, cela ne fonctionnera pas si vous vous trouvez dans un environnement ASP.NET à confiance partielle (par exemple, hébergement partagé).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top