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?

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


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.


2
ale oba wymagają System.Webtego, czy będą działać w środowiskach OWIN z własnym hostingiem?
vibs2006
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.