2009-06-01 21 views
109

Je dois utiliser Server.MapPath() pour combiner certains fichiers chemin que je stocke dans le web.config.Comment puis-je utiliser Server.MapPath() de global.asax?

Cependant, puisque Server.MapPath() repose sur l'actuel HttpContext (je pense), je suis incapable de le faire. Lorsque j'essaie d'utiliser la méthode, même si elle est "disponible", j'obtiens l'exception suivante:

Le fonctionnement du serveur n'est pas disponible dans ce contexte.

Y at-il une autre méthode qui peut mapper un répertoire racine web relatif tel que ~/App_Data/ sur le chemin physique complet tel que C:\inetpub\wwwroot\project\App_data\?

Répondre

266

Vous pouvez essayer System.Web.Hosting.HostingEnvironment.MapPath().

Aucun HttpContext requis.

+0

Des mises en garde à cette technique? –

+9

Non. Si vous lancez Reflector, vous remarquerez que Server.MapPath et Request.MapPath appellent finalement VirtualPath.MapPath qui appelle finalement HostingEnvironment.MapPath. Ils finissent tous au même endroit. HostingEnvironment.MapPath coupe l'homme du milieu. –

+1

+1 cela a corrigé un projet open source qui fonctionnait pour moi puis a juste arrêté d'initialiser en raison de HttpContext.Current.Server explosant pour qu'il n'ait pas de contexte pour une raison quelconque. Passer à cela le remettre à la voile en douceur. –

-3

Vous pouvez essayer HttpContext.Current.Server.MapPath ("/") - Voilà comment je l'ai référencé auparavant dans les classes.

+2

Vous pouvez le référencer comme cela dans les classes qui ont réellement un HttpContext, mais je ne pense pas que global.asax en ait un, d'où le message d'erreur que j'ai reçu. –

1

Lorsqu'en Global.asax, utilisez le contexte objet:

context.Server.mappath()

Contexte vous permet d'accéder également la collection de session, l'objet de la demande, l'objet de réponse . Très utile lorsque vous souhaitez enregistrer les erreurs, par exemple

+0

Il n'y a pas de 'Context' garanti dans Global.asax. –

3

Utilisez AppDomain.CurrentDomain.BaseDirectory car Context peut renvoyer une valeur nulle!