Quelle est la différence entre Server.MapPath et HostingEnvironment.MapPath?

174

Y a-t-il une différence entre Server.MapPath()et HostingEnvironment.MapPath()? At Server.MapPath()-il des avantages sur HostingEnvironment.MapPath()?

Mon problème initial était de mapper le chemin du fichier sur un serveur lorsque le HttpContextn'est pas présent et que je ne peux pas passer une Servervariable de Global.asaxà ma méthode.

J'ai utilisé à la HostingEnvironment.MapPath()place car il n'en a pas besoin HttpContext. Y a-t-il des situations où ces deux méthodes donneront des résultats différents?

empi
la source

Réponses:

204

Server.MapPath()finit par appeler HostingEnvironment.MapPath(), mais cela crée un VirtualPathobjet avec des options spécifiques:

L' VirtualPathobjet passé à HostingEnvironment.MapPath()est construit comme ceci:

VirtualPath.Create(path, VirtualPathOptions.AllowAllPath|VirtualPathOptions.AllowNull);

Edit : en réalité, la seule différence est que vous êtes autorisé à passer null à Server.MapPath(), mais pas àHostingEnvironment.MapPath()

Philippe Leybaert
la source
2
J'obtiendrai donc toujours les mêmes résultats avec les deux méthodes, non? (excluant l'argument nul)
empi
61
TL; DR : toujours utiliser HostingEnvironment.MapPath()pour garder la raison. (+1)
Chris Marisic
15
Il doit y avoir quelque chose de différent au-delà de null car cela Server.MapPath("myFolder")fonctionne bien, mais pour obtenir le même résultat avec HostingEnvironment, j'ai dû utiliser HostingEnvironment.MapPath("~/myFolder").
styfle
Réponse fantastique pour lancer une session ftp via un appel à un service Web. M'a sauvé énorme aujourd'hui !!!
htm11h
10
En fait, il y a une autre différence - les chemins relatifs (par exemple Image / pict.png) ne sont pas autorisés avec HostingEnvironment.MapPath.
NetMage
113

Server.MapPath()nécessite un HttpContext. HostingEnvironment.MapPathne fait pas.

Mark Struzinski
la source
2
mais les deux nécessitent System.Webdonc fonctionneront-ils avec les environnements OWIN auto-hébergés?
vibs2006