Est-ce que Server.MapPath se comporte différemment dans la machine locale et la machine serveur?

StackOverflow https://stackoverflow.com/questions/3155383

  •  01-10-2019
  •  | 
  •  

Question

J'ai eu un vrai cauchemar avec Server.MapPath(). Quand j'appelle Server.MapPath("~") dans ma demande qui est en cours d'exécution dans le serveur de développement ASP.NET, il retourne le répertoire racine qui se termine par une barre oblique inverse comme f:\projects\app1\, mais je l'appelle dans la version publiée, installée dans IIS, il retourne le répertoire racine sans barre oblique inverse comme c:\inetpub\wwwroot\app1. Pourquoi cela se produit? Comment pourrait éviter?

Je l'ai fait 2 scénarios sur une même machine. Windows Server 2008 R2 64 bits, Visual Studio 2010 x64, IIS 7

Mise à jour:

Pourquoi je me soucie à ce sujet? Ineed j'ai écrit un fournisseur de plan du site personnalisé basé sur la structure de fichier / dossier. Il extrait la liste des fichiers / dossiers de répertoire racine "~", remplace le chapitre de répertoire racine avec Server.MapPath("~") afin de générer des URL des fichiers .aspx pour une utilisation dans le contrôle ASP.NET de Menu. Je pense que le code suivant explique ce que je fais:

    string mainRoot = HttpContext.Current.Server.MapPath("~");

    DirectoryInfo di = new DirectoryInfo(mainRoot); 

    //added to solve this problem with Server.MapPath
    if (!mainRoot.EndsWith(@"\"))
        mainRoot += @"\";


    FileInfo[] files = di.GetFiles("*.aspx");
    foreach (FileInfo item in files)
    {
        string path = item.FullName.Replace(mainRoot, "~/").Replace(@"\", "/");

        //do more here
    }
Était-ce utile?

La solution

Il pourrait provenir lorsque vous configurez l'intérieur du répertoire virtuel de IIS, selon que vous avez utilisé un slash lors de la mise en place.

Mais est-ce vraiment? Pourquoi voulez-vous même ce que Server.MapPath("~") retours? Je ne peux pas imaginer que vous auriez jamais l'utiliser comme ça. Une grande partie est plus probable lorsque vous avez réellement besoin d'un chemin vers quelque chose de dans votre application:

Server.MapPath("~/Something/Foo.txt");

En outre, chaque fois que vous construisez des chemins, vous devriez essayer de prendre l'habitude d'utiliser

scroll top