ASP.NET-Websitepfade
Aktualisiert: November 2007
Wenn Sie in einer Website Ressourcen verwenden, müssen Sie oftmals einen Pfad für die Ressource angeben. Sie könnten zum Beispiel einen URL-Pfad verwenden, um in einer Seite auf eine Bilddatei oder auf den URL einer Seite an einer anderen Stelle der Website zu verweisen. Ebenso könnte der Code der Webanwendung einen physikalischen Dateipfad zu einer serverbasierten Datei verwenden, um die Datei mit Lese- und Schreibzugriff aufzurufen. ASP.NET stellt Funktionen zum Verweisen auf Ressourcen und zum Bestimmen der Pfade zu Seiten oder anderen Ressourcen in der Anwendung bereit.
Angeben von Pfaden für Ressourcen
In vielen Fällen müssen Elemente oder Steuerelemente auf der Seite auf eine externe Ressource, z. B. eine Datei, verweisen. ASP.NET unterstützt verschiedene Methoden zum Verweisen auf externe Ressourcen. Welche Methode Sie auswählen, hängt davon ab, ob Sie ein clientseitiges Steuerelement oder ein Webserversteuerelement verwenden.
Clientelemente
Steuerelemente, die keine Webserversteuerelement auf einer Seite sind (Clientelemente), werden unverändert an den Browser weitergeleitet. Daher müssen Sie beim Verweisen auf eine Ressource aus einem Clientelement einen Pfad konstruieren, der den Standardregeln für URLs in HTML entspricht. Sie können einen vollqualifizierten (absoluten) URL-Pfad oder verschiedene Typen relativer Pfade verwenden. Wenn die Seite zum Beispiel ein img-Element enthält, können Sie dessen src-Attribut auf einen der folgenden Pfade festlegen:
Einen absoluten URL-Pfad. Ein absoluter URL-Pfad ist sinnvoll, wenn Sie auf Ressourcen an einem anderen Speicherort, z. B. einer externen Website, verweisen.
<img src="https://www.contoso.com/MyApplication/Images/SampleImage.jpg" />
Ein Pfad relativ zum Sitestamm, der gegen den Sitestamm (nicht gegen den Anwendungsstamm) aufgelöst wird. Pfade relativ zum Sitestamm sind sinnvoll, wenn Sie in mehreren Anwendungen verwendete Ressourcen wie Bilder oder Clientskriptdateien in einem Ordner unterhalb des Websitestamms aufbewahren.
In diesem Beispielpfad wird davon ausgegangen, dass sich ein Bilderordner unterhalb des Websitestamms befindet.
<img src="/Images/SampleImage.jpg" />
Wenn die Adresse der Website https://www.contoso.com lautet, würde der Pfad folgendermaßen aufgelöst.
https://www.contoso.com/Images/SampleImage.jpg
Ein relativer Pfad, der gegen den aktuellen Seitenpfad aufgelöst wird.
<img src="Images/SampleImage.jpg" />
Ein relativer Pfad, der als Peer des aktuellen Seitenpfades aufgelöst wird.
<img src="../Images/SampleImage.jpg" />
Hinweis: Standardmäßig lösen Browser relative Pfade auf Basis der aktuellen Seiten-URL auf. Sie können jedoch ein HTML-base-Element in eine Seite einschließen, um einen alternativen Basispfad anzugeben.
Serversteuerelemente
In ASP.NET-Serversteuerelementen, die auf Ressourcen verweisen, können Sie absolute oder relative Pfade verwenden, die auch bei Clientelementen verwendet werden. Wenn Sie relative Pfade verwenden, werden diese relativ zum Pfad der Seite, des Benutzersteuerelements oder Themas aufgelöst, in dem das Steuerelement enthalten ist. Nehmen Sie zum Beispiel an, dass ein Steuerelement in dem Ordner Steuerelemente enthalten ist. Das Benutzersteuerelement enthält ein Image-Webserversteuerelement, dessen ImageUrl-Eigenschaft auf den folgenden Pfad festgelegt wurde: Images/SampleImage.jpg.
Bei Ausführung des Benutzersteuerelements wird der Pfad folgendermaßen aufgelöst: /Controls/Images/SampleImage.jpg. Dies gilt unabhängig davon, an welchem Speicherort sich die Seite, die das Benutzersteuerelement enthält, befindet.
Hinweis: |
---|
In Masterseiten werden Pfade zu Ressourcen anhand des Pfads der Inhaltsseite aufgelöst. Weitere Informationen finden Sie unter Übersicht über ASP.NET-Masterseiten. |
Absolute und relative Pfadverweise in einem Serversteuerelement haben folgende Nachteile:
Absolute Pfade sind nicht zwischen Anwendungen übertragbar. Wenn Sie die Anwendung verschieben, auf die der absolute Pfad zeigt, werden die Verknüpfungen zerstört.
Relative Pfade im Format von Clientelementen sind möglicherweise schwierig zu verwalten, wenn Sie Ressourcen oder Seiten in andere Ordner verschieben.
Um diese Nachteile auszugleichen, stellt ASP.NET den Operator (~) für das Stammverzeichnis der Webanwendung bereit, den Sie bei der Angabe von Pfaden in Serversteuerelementen verwenden können. ASP.NET löst den ~-Operator zum Stamm der aktuellen Anwendung auf. Sie können den ~-Operator zusammen mit Ordnern verwenden, um einen Pfad anzugeben, der auf dem aktuellen Stamm basiert.
Das folgende Beispiel zeigt die Verwendung des ~-Operator zur Pfadangabe einer Bilddatei relativ zum Stamm. Beim Verwenden des Serversteuerelements Image wird die Bilddatei, unabhängig vom Ort der Seite innerhalb der Website, aus dem Bilderordner, der sich direkt unterhalb des Stammverzeichnis befindet, ausgelesen.
<asp:image id="Image1"
ImageUrl="~/Images/SampleImage.jpg" />
Sie können den ~-Operator in jeder pfadbezogenen Eigenschaft von Serversteuerelementen verwenden. Der ~-Operator wird nur bei Serversteuerelementen und in Servercode erkannt. Sie können den ~-Operator nicht für Clientelemente verwenden.
Hinweis: |
---|
Bitte beachten Sie bei mobilen Seiten Folgendes: Wenn Ihre Anwendung auf Sitzungen ohne Cookies basiert oder Anfragen von mobilen Geräten erhält, die Sitzungen ohne Cookies erfordern, kann die Verwendung einer Tilde ("~") im Pfad zum Erstellen einer neuen Sitzung und möglicherweise zu Datenverlust führen. Um Eigenschaften für mobile Steuerelemente über einen Pfad, der eine Tilde enthält (bspw. "~/path"), festzulegen, müssen Sie den Pfad zuerst über die ResolveUrl-Methode auflösen, bevor Sie den Pfad der Eigenschaft zuweisen. |
Bestimmen physikalischer Dateipfade für die aktuelle Website
Möglicherweise müssen Sie in der Anwendung den Pfad einer Datei oder einer anderen Ressource auf dem Server bestimmen. Wenn die Anwendung zum Beispiel programmgesteuert eine Textdatei liest oder schreibt, müssen Sie den vollständigen physikalischen Pfad der Datei an die Methoden übergeben, die für den Lese- und Schreibzugriff verwendet werden.
Es wird nicht empfohlen, physische Dateipfade (beispielsweise C:\\Website\\EigeneAnwendungen) in der Anwendung hart zu kodieren, da sich die Pfade beim Verschieben oder Bereitstellen der Anwendung ändern können. ASP.NET bietet jedoch die Möglichkeit, jeden beliebigen physikalischen Dateipfad innerhalb der Anwendung programmgesteuert abzurufen. Anschließend können Sie den Basispfad der Datei verwenden, um einen vollständigen Pfad zu der gewünschten Ressource zu erstellen. Die beiden am häufigsten zur Bestimmung eines Dateipfades verwendeten ASP.NET-Features sind die Eigenschaften des HttpRequest-Objekts, die Pfadinformationen zurückgeben, sowie die MapPath-Methode.
Hinweis: |
---|
Physikalische Dateipfade sollten nicht an den Client übermittelt werden, da ein böswilliger Benutzer diese Pfade verwenden könnte, um Informationen über die Anwendung in Erfahrung zu bringen. |
Bestimmen des Pfades aus Anforderungseigenschaften
Die folgende Tabelle listet Eigenschaften des HttpRequest-Objekts auf, mithilfe derer Sie die Pfade von Ressourcen in der Anwendung bestimmen können.
Die in der Tabelle aufgelisteten Beispiele basieren auf den folgenden Annahmen:
Eine Browseranforderung wurde über die folgende URL ausgelöst: https://www.contoso.com/MyApplication/MyPages/Default.aspx.
Der Begriff "virtueller Pfad" bezieht sich auf den Teil der angeforderten URL, die auf den Serverbezeichner folgt. In diesem Fall ist der virtuelle Pfad der folgende: /MyApplication/MyPages/Default.aspx.
Der physische Pfad für den Stamm der Website ist wie folgt: C:\inetpub\wwwroot\MyApplication\.
Der physische Pfad enthält einen Ordner mit dem Namen EigeneSeiten.
Eigenschaft |
Beschreibung |
---|---|
Ruft den Stammpfad der aktuellen Anwendung ab, unabhängig davon, von welcher Stelle der Anwendung aus Sie den Stammpfad anfordern. Für das Beispiel gibt die Eigenschaft Folgendes zurück: / |
|
Ruft den virtuellen Pfad der aktuellen Anforderung ab. Unterscheidet sich von der FilePath-Eigenschaft dahingehend, dass CurrentExecutionFilePath korrekt ist, wenn die Anforderung in Servercode umgeleitet worden ist. Im Beispiel gibt die Eigenschaft Folgendes zurück: /MyApplication/MyPages/Default.aspx Wenn Sie die Eigenschaft in einem Codeteil abrufen, der im Ergebnis eines Aufrufs von Transfer oder Execute ausgeführt wird, spiegelt der Pfad den Speicherort des Codes wider. |
|
Ruft den virtuellen Pfad der aktuellen Anforderung ab. Im Beispiel gibt die Eigenschaft Folgendes zurück: /MyApplication/MyPages/Default.aspx Im Gegensatz zur CurrentExecutionFilePath-Eigenschaft spiegelt FilePath keine serverseitigen Übertragungen wider. |
|
Ruft den virtuellen Pfad der aktuellen Anforderung ab. Im Beispiel gibt die Eigenschaft Folgendes zurück: /MyApplication/MyPages/default.aspx |
|
Ruft den physikalischen Dateisystempfad des Stammverzeichnisses der aktuell ausgeführten Anwendung ab. Im Beispiel gibt die Eigenschaft Folgendes zurück: C:\inetpub\wwwroot\ |
|
Ruft den physischen Dateisystempfad ab, der der angeforderten URL entspricht. Im Beispiel gibt die Eigenschaft Folgendes zurück: C:\inetpub\wwwroot\MyApplication\MyPages\default.aspx |
Verwenden der MapPath-Methode
Die MapPath-Methode gibt den vollständigen physikalischen Pfad für einen virtuellen Pfad zurück, den Sie an die Methode übergeben. So gibt zum Beispiel der folgende Code den Dateipfad für den Stamm der Website zurück:
Dim rootPath As String = Server.MapPath("~")
String rootPath = Server.MapPath("~");
Hinweis: |
---|
Der an die MapPath-Methode übergebene Pfad darf kein absoluter Pfad, sondern muss ein relativer Pfad sein. |