Bagaimana cara menggunakan Server.MapPath () dari global.asax?

122

Saya perlu menggunakan Server.MapPath()untuk menggabungkan beberapa jalur file yang saya simpan di web.config.

Namun, karena Server.MapPath()bergantung pada HttpContext saat ini (menurut saya), saya tidak dapat melakukan ini. Saat mencoba menggunakan metode ini, meskipun "tersedia", saya mendapatkan pengecualian berikut:

Operasi server tidak tersedia dalam konteks ini.

Apakah ada metode lain yang dapat memetakan direktori relatif root web seperti ~/App_Data/ke jalur fisik lengkap seperti C:\inetpub\wwwroot\project\App_data\?

John Bubriski
sumber

Jawaban:

295

Anda dapat mencoba System.Web.Hosting.HostingEnvironment.MapPath () .

Tidak diperlukan HttpContext.

Corbin Maret
sumber
Ada peringatan untuk teknik ini?
John Bubriski
10
Nggak. Jika Anda menjalankan Reflector, Anda akan melihat bahwa Server.MapPath dan Request.MapPath akhirnya memanggil VirtualPath.MapPath yang akhirnya memanggil HostingEnvironment.MapPath. Semuanya berakhir di tempat yang sama. HostingEnvironment.MapPath memotong orang tengah.
Corbin
1
+1 ini memperbaiki proyek open source yang berfungsi untuk saya kemudian berhenti menginisialisasi karena HttpContext.Current.Server meledak karena tidak memiliki konteks karena alasan tertentu. Beralih ke ini mengembalikannya ke layar yang mulus.
Chris Marisic
4

Gunakan AppDomain.CurrentDomain.BaseDirectorykarena Contextmungkin mengembalikan null !!

Kiran Banda
sumber
1

Saat di Global.asax, gunakan objek konteks :

context.Server.mappath ()

Konteks memungkinkan Anda mengakses juga koleksi sesi, objek permintaan, objek respons. Sangat berguna saat Anda ingin mencatat kesalahan, misalnya

tekBlues
sumber
Tidak ada jaminan Contextdi Global.asax.
Anders Tornblad
-3

Anda bisa mencoba HttpContext.Current.Server.MapPath ("/") - Begitulah cara saya mereferensikannya sebelumnya di kelas.

VoltaicShock
sumber
2
Anda dapat mereferensikannya seperti itu di kelas yang sebenarnya MEMILIKI HttpContext, tetapi saya rasa global.asax tidak memilikinya, maka pesan kesalahan yang saya terima.
John Bubriski