Est-ce que Server.MapPath se comporte différemment dans la machine locale et la machine serveur?
-
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
}
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