web-dev-qa-db-fra.com

Utilisation de Server.MapPath dans MVC3

J'ai le code

string xsltPath = System.Web.HttpContext.Current.Server.MapPath(@"App_Data") + "\\" + TransformFileName

Il retourne

C:\inetpub\wwwroot\websiteName\SERVICENAME\App_Data\FileName.xsl

Pourquoi est-ce que j'obtiens le chemin d'accès au ServiceController, SERVICENAME? Je veux le chemin d'accès à App_Data qui est dans

C:\inetpub\wwwroot\websiteName\App_Data\FileName.xsl

23
P.Brian.Mackey

Vous devez spécifier que vous souhaitez démarrer à partir de la racine virtuelle:

string xsltPath = Path.Combine(System.Web.HttpContext.Current.Server.MapPath(@"~/App_Data"), TransformFileName);

En outre, il est préférable d’utiliser Path.Combine pour combiner des chemins plutôt que de concaténer des chaînes. Path.Combine fera en sorte que vous ne vous retrouviez pas dans une situation avec des séparateurs à double chemin.

MODIFIER:

Pouvez-vous définir des chemins "absolus" et "relatifs" et comment ils se comparent aux chemins "physiques" et "virtuels"?

MSDN a une bonne explication sur les chemins relatifs, physiques et virtuels. Jetez un coup d'oeil là-bas.

57
vcsjones

Les réponses données jusqu’à présent correspondent à ce que vous recherchez, mais je pense que dans votre cas particulier, vous avez réellement besoin de ce qui suit:

AppDomain.CurrentDomain.GetData("DataDirectory").ToString()

Cela renverra toujours le chemin du fichier au répertoire App_Data si ce nom de répertoire change dans les versions futures de MVC ou ASP.NET.

6
Matt Hamsmith

Essayez de faire comme ceci (@"~/App_Data"). ~/ représente le répertoire racine.

0