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?

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()


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.


2
Aber beide erfordern, System.Webdass sie mit selbst gehosteten OWIN-Umgebungen funktionieren.
Vibs2006
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.