Apa perbedaan antara Server.MapPath dan HostingEnvironment.MapPath?

174

Apakah ada perbedaan antara Server.MapPath()dan HostingEnvironment.MapPath()? Apakah Server.MapPath()ada kelebihannya HostingEnvironment.MapPath()?

Masalah asli saya adalah memetakan jalur file di server ketika HttpContexttidak ada dan saya tidak bisa meneruskan Servervariabel dari Global.asaxke metode saya.

Saya menggunakan HostingEnvironment.MapPath()karena itu tidak perlu HttpContext. Adakah situasi ketika kedua metode ini akan memberikan hasil yang berbeda?

empi
sumber

Jawaban:

204

Server.MapPath()akhirnya panggilan HostingEnvironment.MapPath(), tetapi itu menciptakan VirtualPathobjek dengan opsi spesifik:

The VirtualPathobjek diteruskan ke HostingEnvironment.MapPath()dibangun seperti ini:

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

Sunting : pada kenyataannya, satu-satunya perbedaan adalah bahwa Anda diizinkan untuk melewati nol Server.MapPath(), tetapi tidak bolehHostingEnvironment.MapPath()

Philippe Leybaert
sumber
2
Jadi saya akan selalu mendapatkan hasil yang sama dari kedua metode, bukan? (tidak termasuk argumen nol)
empi
61
TL; DR : selalu gunakan HostingEnvironment.MapPath()untuk menjaga kewarasan. (+1)
Chris Marisic
15
Pasti ada sesuatu yang berbeda di luar nol karena Server.MapPath("myFolder")berfungsi dengan baik tetapi untuk mendapatkan hasil yang sama dengan HostingEnvironment, saya harus menggunakan HostingEnvironment.MapPath("~/myFolder").
styfle
Jawaban yang fantastis untuk memulai sesi ftp melalui panggilan ke layanan web. Menyelamatkan saya besar hari ini !!!
htm11h
10
Sebenarnya ada perbedaan lain - jalur relatif (mis. Gambar / pict.png) tidak diizinkan dengan HostingEnvironment.MapPath.
NetMage
113

Server.MapPath()membutuhkan sebuah HttpContext. HostingEnvironment.MapPathtidak.

Mark Struzinski
sumber
2
tetapi keduanya mengharuskan System.Webdemikian apakah mereka akan bekerja dengan lingkungan OWIN yang Diinangi Sendiri?
vibs2006