Qual è la differenza tra Server.MapPath e HostingEnvironment.MapPath?


174

C'è qualche differenza tra Server.MapPath()e HostingEnvironment.MapPath()? Ha Server.MapPath()qualche vantaggio rispetto HostingEnvironment.MapPath()?

Il mio problema originale era mappare il percorso del file su un server quando HttpContextnon è presente e non riesco a passare una Servervariabile dal Global.asaxmio metodo.

Ho usato HostingEnvironment.MapPath()invece poiché non è necessario HttpContext. Ci sono situazioni in cui questi due metodi daranno risultati diversi?

Risposte:


204

Server.MapPath()infine chiama HostingEnvironment.MapPath(), ma crea un VirtualPathoggetto con opzioni specifiche:

L' VirtualPathoggetto passato a HostingEnvironment.MapPath()è costruito in questo modo:

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

Modifica : in realtà, l'unica differenza è che ti è permesso passare a null Server.MapPath(), ma non aHostingEnvironment.MapPath()


2
Quindi otterrò sempre gli stessi risultati da entrambi i metodi, giusto? (escluso argomento nullo)
empi

61
TL; DR : usare sempre HostingEnvironment.MapPath()per mantenere la sanità mentale. (+1)
Chris Marisic,

15
Ci deve essere qualcosa di diverso da null perché Server.MapPath("myFolder")funziona bene, ma per ottenere lo stesso risultato con HostingEnvironment, ho dovuto usare HostingEnvironment.MapPath("~/myFolder").
Styfle

Risposta fantastica per l'avvio di una sessione ftp tramite una chiamata a un servizio Web. Mi hai salvato enorme oggi !!!
htm11h

10
In realtà esiste un'altra differenza: i percorsi relativi (ad esempio Image / pict.png) non sono consentiti con HostingEnvironment.MapPath.
NetMage

113

Server.MapPath()richiede un HttpContext. HostingEnvironment.MapPathnon.


2
ma entrambi richiedono System.Webquindi funzioneranno con ambienti OWIN con hosting autonomo?
vibs2006,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.