Jaka jest różnica między Server.MapPath i HostingEnvironment.MapPath?

174

Czy jest jakaś różnica między Server.MapPath()i HostingEnvironment.MapPath()? Czy Server.MapPath()ma jakieś zalety HostingEnvironment.MapPath()?

Mój pierwotny problem polegał na mapowaniu ścieżki pliku na serwerze, gdy HttpContextnie ma tej Serverzmiennej i nie mogę przekazać zmiennej z Global.asaxdo mojej metody.

Użyłem HostingEnvironment.MapPath()zamiast tego, ponieważ nie potrzebuje HttpContext. Czy są sytuacje, w których te dwie metody dadzą różne wyniki?

empi
źródło

Odpowiedzi:

204

Server.MapPath()w końcu wywołuje HostingEnvironment.MapPath(), ale tworzy VirtualPathobiekt z określonymi opcjami:

VirtualPathPrzedmiotem przekazywane HostingEnvironment.MapPath()jest zbudowany w następujący sposób:

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

Edycja : w rzeczywistości jedyną różnicą jest to, że możesz przekazać null do Server.MapPath(), ale nie możeszHostingEnvironment.MapPath()

Philippe Leybaert
źródło
2
Więc zawsze będę uzyskiwał te same wyniki z obu metod, prawda? (bez argumentu zerowego)
empi
61
TL; DR : zawsze używaj, HostingEnvironment.MapPath()aby zachować zdrowy rozsądek. (+1)
Chris Marisic
15
Musi być coś innego niż null, ponieważ Server.MapPath("myFolder")działa dobrze, ale aby uzyskać ten sam wynik z HostingEnvironment, musiałem użyć HostingEnvironment.MapPath("~/myFolder").
styfle
Fantastyczna odpowiedź na zainicjowanie sesji ftp przez połączenie z usługą internetową. Uratował mnie dzisiaj ogromnie !!!
htm11h
10
Właściwie jest jeszcze jedna różnica - ścieżki względne (np. Image / pict.png) nie są dozwolone w HostingEnvironment.MapPath.
NetMage
113

Server.MapPath()wymaga HttpContext. HostingEnvironment.MapPathnie.

Mark Struzinski
źródło
2
ale oba wymagają System.Webtego, czy będą działać w środowiskach OWIN z własnym hostingiem?
vibs2006