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?

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()


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.


2
mais les deux nécessitent System.Webdonc fonctionneront-ils avec les environnements OWIN auto-hébergés?
vibs2006
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.