Global.asax'tan Server.MapPath () nasıl kullanabilirim?


122

Server.MapPath()İçinde sakladığım bazı dosya yollarını birleştirmek için kullanmam gerekiyor web.config.

Ancak, Server.MapPath()mevcut HttpContext'e (sanırım) dayandığından, bunu yapamıyorum. Yöntemi kullanmaya çalışırken, "kullanılabilir" olmasına rağmen, aşağıdaki istisnayı alıyorum:

Sunucu işlemi bu bağlamda kullanılamaz.

~/App_Data/Tam fiziksel yol gibi bir web köküne göre dizini eşleyebilen başka bir yöntem var mı C:\inetpub\wwwroot\project\App_data\?

Yanıtlar:


295

System.Web.Hosting.HostingEnvironment.MapPath () deneyebilirsiniz .

HttpContext gerekmez.


Bu tekniğe herhangi bir uyarı var mı?
John Bubriski

10
Hayır! Reflector'ı çalıştırırsanız, Server.MapPath ve Request.MapPath'in nihayetinde HostingEnvironment.MapPath'i çağıran VirtualPath.MapPath'i çağırdığını fark edeceksiniz. Hepsi aynı yerde sona eriyor. HostingEnvironment.MapPath aracıları ortadan kaldırır.
Corbin Mart

1
+1 bu, benim için çalışan bir açık kaynak projesini düzeltti, ardından HttpContext.Current.Server'ın bir nedenle bir bağlamı olmadığı için patlaması nedeniyle başlatmayı durdurdu. Buna geçmek, onu tekrar düzgün bir seyir haline getirir.
Chris Marisic

4

Kullanın AppDomain.CurrentDomain.BaseDirectoryçünkü Contextnull döndürebilir !!


1

Global.asax içindeyken, bağlam nesnesini kullanın :

context.Server.mappath ()

Bağlam ayrıca oturum koleksiyonuna, istek nesnesine ve yanıt nesnesine erişmenizi sağlar. Örneğin hataları kaydetmek istediğinizde çok kullanışlıdır


ContextGlobal.asax'ta garanti yoktur .
Anders Tornblad

-3

HttpContext.Current.Server.MapPath ("/") deneyebilirsiniz - Daha önce sınıflarda ona bu şekilde başvurmuştum.


2
Aslında bir HttpContext'e SAHİP sınıflarda bu şekilde referans verebilirsiniz, ancak global.asax'ın bir tane olduğunu sanmıyorum, dolayısıyla aldığım hata mesajı.
John Bubriski
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.