2009-06-01 7 views
109

Ich brauche Server.MapPath() zu kombinieren einige Dateien Pfad, den ich in der web.config speichern.Wie kann ich Server.MapPath() von global.asax verwenden?

Da jedoch Server.MapPath() auf den aktuellen HttpContext beruht (glaube ich), kann ich dies nicht tun. Wenn ich versuche, die Methode zu verwenden, obwohl sie "verfügbar" ist, bekomme ich die folgende Ausnahme:

Server-Betrieb ist in diesem Zusammenhang nicht verfügbar.

Gibt es eine andere Methode, die ein Web-Root-Verzeichnis relatives wie ~/App_Data/ zum vollständigen physischen Pfad wie C:\inetpub\wwwroot\project\App_data\ abbilden?

Antwort

266

Sie könnten versuchen System.Web.Hosting.HostingEnvironment.MapPath().

Kein HttpContext erforderlich.

+0

Irgendwelche Vorbehalte zu dieser Technik? –

+9

Nein. Wenn Sie Reflector starten, stellen Sie fest, dass Server.MapPath und Request.MapPath schließlich VirtualPath.MapPath aufrufen, wodurch schließlich HostingEnvironment.MapPath aufgerufen wird. Sie alle enden am selben Ort. HostingEnvironment.MapPath schneidet den mittleren Mann aus. –

+1

+1 das reparierte ein Open-Source-Projekt, das für mich funktionierte, dann hörte gerade auf zu initialisieren, weil HttpContext.Current.Server dafür sprengte, dass es aus irgendeinem Grund keinen Zusammenhang hatte. Der Wechsel zu diesem Punkt bringt es zurück zu glattem Segeln. –

-3

Sie könnten versuchen, HttpContext.Current.Server.MapPath ("/") - So habe ich es zuvor in Klassen verwiesen.

+2

Sie können es so in Klassen verweisen, die tatsächlich einen HttpContext haben, aber ich denke nicht, dass global.asax einen hat, daher die Fehlermeldung, die ich erhielt. –

1

Wenn in Global.asax, verwenden Sie die Kontext Objekt:

context.Server.mappath()

Kontext können Sie auch die Sitzungssammlung zugreifen, das Request-Objekt, das Response-Objekt . Sehr nützlich, wenn Sie Fehler protokollieren möchten, z. B.

+0

Es gibt keinen garantierten "Kontext" in Global.asax. –

3

Verwenden Sie AppDomain.CurrentDomain.BaseDirectory, weil Context möglicherweise null zurückgibt !!