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\?

Jawaban:


295

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

Tidak diperlukan HttpContext.


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 !!


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


Tidak ada jaminan Contextdi Global.asax.
Anders Tornblad

-3

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.