Was ist der Unterschied zwischen Server.MapPath und HostingEnvironment.MapPath?

174

Gibt es einen Unterschied zwischen Server.MapPath()und HostingEnvironment.MapPath()? Hat Server.MapPath()irgendwelche Vorteile gegenüber HostingEnvironment.MapPath()?

Mein ursprüngliches Problem bestand darin, den Dateipfad auf einem Server zuzuordnen, wenn der HttpContextnicht vorhanden ist und ich keine ServerVariable von Global.asaxan meine Methode übergeben kann.

Ich habe HostingEnvironment.MapPath()stattdessen verwendet, da es nicht benötigt HttpContext. Gibt es Situationen, in denen diese beiden Methoden unterschiedliche Ergebnisse liefern?

empi
quelle

Antworten:

204

Server.MapPath()ruft schließlich auf HostingEnvironment.MapPath(), erstellt jedoch ein VirtualPathObjekt mit bestimmten Optionen:

Das übergebene VirtualPathObjekt HostingEnvironment.MapPath()ist wie folgt aufgebaut:

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

Bearbeiten : In Wirklichkeit besteht der einzige Unterschied darin, dass Sie null an übergeben dürfen Server.MapPath(), aber nicht anHostingEnvironment.MapPath()

Philippe Leybaert
quelle
2
Ich werde also mit beiden Methoden immer die gleichen Ergebnisse erzielen, oder? (ohne Null-Argument)
Empi
61
TL; DR : immer verwenden HostingEnvironment.MapPath(), um geistige Gesundheit zu bewahren. (+1)
Chris Marisic
15
Es muss etwas anderes als null geben, da es gut Server.MapPath("myFolder")funktioniert, aber um das gleiche Ergebnis mit HostingEnvironment zu erzielen, musste ich verwenden HostingEnvironment.MapPath("~/myFolder").
Styfle
Fantastische Antwort zum Initiieren einer FTP-Sitzung über einen Anruf bei einem Webdienst. Hat mich heute riesig gerettet !!!
htm11h
10
Tatsächlich gibt es einen weiteren Unterschied: Relative Pfade (z. B. Image / pict.png) sind mit HostingEnvironment.MapPath nicht zulässig.
NetMage
113

Server.MapPath()erfordert eine HttpContext. HostingEnvironment.MapPathnicht.

Mark Struzinski
quelle
2
Aber beide erfordern, System.Webdass sie mit selbst gehosteten OWIN-Umgebungen funktionieren.
Vibs2006