Kolumne: Dino talks

Der (rechte) Weg zu Webressourcen
Kommentare

Wenn Sie in einer Webanwendung auf Bilder und andere Arten von Ressourcen verweisen, können Sie das mit einem absoluten Pfad tun, der sich auf die tatsächliche Wurzel der Host-Site bezieht, oder sich für einen relativen Pfad entscheiden. Normalerweise lösen Browser relative Pfade auf, indem sie den URL der aktuellen Seite als Basis nehmen. Absolute Pfade sind zwischen Anwendungen nicht portabel, während sich relative Pfade schwierig verwalten lassen, wenn Sie Ressourcen in andere Ordner verschieben. Sowohl ASP.NET Web Forms als auch ASP.NET MVC bieten einige Einrichtungen, die dem zugrunde liegenden Framework die Aufgaben übertragen, die Situation zu analysieren und den richtigen Pfad zur Ressource zurückzugeben.

Stellen Sie sich folgendes Szenario vor: Sie haben eine Webanwendung, die vorzüglich arbeitet und erfolgreich auf einer bestimmten IIS-Stammwebsite bereitgestellt wurde. Irgendwann entscheidet Ihr Admin-Team, zu einem virtuellen Verzeichnis zu wechseln. Im Allgemeinen bringt das Hosting einer Webanwendung als IIS-Stammwebsite oder als virtuelles Verzeichnis unter einer bestimmten IIS-Stammwebsite keine besonderen Leistungsprobleme mit sich. Auch werden Sie kaum in der Konfigurierung und Isolierung der Site eingeschränkt. Praktisch können Sie trotzdem jeder Anwendung, die in einem virtuellen Verzeichnis gehostet wird, ihren eigenen Anwendungspool geben, falls Ihnen das bei der Optimierung der Anwendung hilft. Schließlich sind virtuelle Verzeichnisse und Websites eigentlich das Gleiche: Technisch gesehen ist eine Website einfach ein virtuelles Verzeichnis unter dem IIS-Stamm.

Aus Sicht eines Administrators ist die Entscheidung zwischen einer Website und einem virtuellen Verzeichnis am Ende vor allem eine Sache der einfachen Verwaltbarkeit, wenn nicht der persönlichen Vorliebe. Man erwartet auch nicht, dass sich das Ganze auf den Anwendungscode auswirkt. Das ist aber falsch! Wenn Sie in Ihrem Code nicht sorgfältig genug berücksichtigen, wie die Verknüpfungen zu Webressourcen (CSS-Stylesheets, Skripts und Bildern) realisiert sind, kann der einfache Wechsel von einer Website zu einem virtuellen Verzeichnis einen ganzen Sack voll hässlicher Verknüpfungsfehler verursachen. Dieser Artikel beschäftigt sich eingehend mit dem API, das ASP.NET Web Forms und ASP.NET MVC bieten, um Ressourcenverknüpfungen für den Host-Pfad der Site transparent zu machen.

Absolute und relative Pfade

Wenn Sie eine Ressource von einer Webseite oder einer Masterseite aus referenzieren, ist das mit einem absoluten, vollständig qualifizierten URL möglich oder mit verschiedenen Arten von relativen Pfaden. Enthält Ihre Seite zum Beispiel ein CSS-Stylesheet, können Sie das href-Attribut auf den folgenden Pfad setzen:

  

In diesem Fall ist der URL absolut und vollständig qualifiziert. Es ist kein zusätzlicher Aufwand seitens des Browsers oder der Serverumgebung notwendig, um ihn aufzulösen. Im Allgemeinen ist ein absoluter URL keine gute Empfehlung, außer wenn Sie auf Ressourcen von einem anderen Standort wie zum Beispiel einer externen Website verweisen. Für Ressourcen, die zur aktuellen Anwendung lokal sind, ist ein relativer Pfad normalerweise besser geeignet, da er Sie nicht an einen festen Pfad bindet. Wenn Sie sich für einen relativen Pfad entscheiden, ist es leichter, die Site an einen anderen Standort oder eine Domäne zu verschieben, ohne dabei fehlerhafte Links zu provozieren.

Hinsichtlich relativer Pfade werden Sie allerdings feststellen, dass es viele Optionen gibt und keine vollständige Äquivalenz besteht. Als relativer Pfad wird häufig der Pfad relativ zum Stammverzeichnis der Site verwendet, wie das folgende Beispiel zeigt:

Der jetzige URL wird bezüglich des Websitestamms aufgelöst. Pfade relativ zum Stammverzeichnis der Site sind nützlich, um Ressourcen zu referenzieren, die in der gesamten Site verwendet werden. Dennoch sei darauf hingewiesen, dass ein Pfad relativ zum Stammverzeichnis der Site nur so lange funktioniert, wie der Websitestamm einen Ordner namens CSS enthält. Wie Sie gleich sehen werden, kann dies ein erhebliches Problem aufwerfen, dem sich der Entwickler stellen muss. Ein anderer Typ eines relativen Pfads sieht folgendermaßen aus: In diesem Fall haben wir einen relativen Pfad, der bezüglich des aktuellen Seitenpfads aufgelöst wird. Außerdem wird angenommen, dass ein Ordner CSS unter dem Pfad der Seite, die das -Element enthält, verfügbar ist. Schließlich können Sie eines oder mehrere Elemente mit doppelten Punkten (..) hinzufügen, um eine bzw. mehrere Ebenen in der Hierarchie nach oben zu gehen. Zwei Punkte (..) bezeichnen das übergeordnete Verzeichnis, während ein Punkt (.) für das aktuelle Verzeichnis steht.

Die eben erwähnten Formen von relativen Pfaden können Sie beliebig in jeder Seite verwenden. Auch wenn es offensichtlich zu sein scheint – solange der URL die richtige Ressource abruft, ist alles OK. Das Problem kann auftreten, wenn Sie die Anwendung an einem anderen Standort bereitstellen, beispielsweise von einer Website zu einem virtuellen Verzeichnis verschieben. Es gibt kein statisches Verfahren, Webressourcen in einer Weise zu referenzieren, die von Bereitstellungsänderungen unbeeinflusst bleibt. Absolute Pfade müssen offenbar aktualisiert werden, wenn Sie den Site-Standort ändern. Relative Pfade bleiben voll funktionsfähig, wenn Sie die Site einfach umbenennen. Allerdings scheitern relative Pfad, wenn Sie von einer Website zu einem virtuellen Verzeichnis (oder umgekehrt) wechseln. Um dem zu entsprechen und Webanwendungen zu erstellen, die sich als eigenständige Websites oder virtuelle Verzeichnisse bereitstellen lassen, müssen Sie die Verknüpfungen zu Ressourcen in bestimmten Servercode einhüllen, der die Abhängigkeit per Programm auflöst. Das entsprechende API sieht in ASP.NET Web Forms etwas anders aus als in ASP.NET MVC.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -