Benutzer mit den meisten Antworten
Pfade und virtuelle Verzeichnisse

Frage
-
Hi beisammen,
meine Webanwendung soll in einem virtuellen Verzeichnis unter IIS 7 laufen. Das klappt soweit sehr schön, bis auf sämtliche Zugriffe, die per Pfad aufgelöst werden.
Gleichgültig ob dort per Server.Mappath("/images/test.jpg") oder einfach ein img-Tag auf ein Pfad verweist - nichts klappt mehr.
Die Applikation versucht immer nach wwwroot zu schreiben, bzw. von dort zu lesen, anstatt nach wwwroot/virtualpath/.
Gibt es irgendwo einen Schalter (web.config?) den ich übersehen habe oder muss ich sämtliche Zugriffe neu auflösen?
Besten Dank im Voraus!
Thomas
Antworten
-
Hallo Thomas,
Die Mappath-Geschichte, dabei geht es um Uploads von Dokumenten, die das gleiche Problem aufweisen.
Wie ist denn die Vorgehensweise, wenn ich HTML-Tags rausrendere? Es gibt da ein paar Servercontrols in meinem Projekt.
Dann gilt das selbe Problem bei Zugriffen auf Webmethoden per Javascript. Z.B. habe ich eine Routine, die, je nach Userkonfiguration, aus einer Datenbank ein Feld holt, wo ein Pfad auf eine Webmethode hinterlegt ist, die dann beim Rendern in ein Control als Javascript-Methode rausgeschrieben wird.
wie gesagt, serverseitig kannst Du in den allermeisten Fällen (auch bei Server.MapPath) mit ~/Images/Abc.jpg o.ä. arbeiten, das wird dann korrekt umgesetzt.
Wenn Du selbst eine Ausgabe erzeugst, die die richtigen Pfade beinhalten muss, gibt es noch ResolveClientUrl bzw. ResolveUrl. Diesen Methoden kannst Du auch einen Pfad im Format ~/Images/Abc.jpg übergeben, diese geben dir dann bspw. /Anwendungsordner/Images/Abc.jpg oder auch ../Images/Abc.jpg, ... zurück. Siehe dazu:
http://www.andornot.com/blog/post/ResolveUrl-vs-ResolveClientUrl.aspx
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Thomas Ehlert Mittwoch, 20. Juli 2011 08:44
Alle Antworten
-
Hallo Thomas,
Gleichgültig ob dort per Server.Mappath("/images/test.jpg") oder einfach ein img-Tag auf ein Pfad verweist - nichts klappt mehr.
Die Applikation versucht immer nach wwwroot zu schreiben, bzw. von dort zu lesen, anstatt nach wwwroot/virtualpath/.
ist ja aber auch kein Wunder. / geht halt immer auf den Root der Website.
Nimm für serverseitige Controls die schreibweise ~/Images/Abc.jpg. Also ~/ zu Beginn, damit wird dann von ASP.NET automatisch auf den Root der Anwendung aufgelöst.
Server.MapPath( ... ) ist für eine Ausgabe von Attributen in der HTML Seite nicht geeignet, da dann X:\Ordner\Website\Images\Abc.jpg an den Client gesendet wird und der sicherlich keinen solchen Ordner auf der lokalen Platte hat.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort vorgeschlagen Thorsten DörflerEditor Mittwoch, 20. Juli 2011 05:53
-
Hallo Stefan,
besten Dank für Deine Ausführungen.
Die Mappath-Geschichte, dabei geht es um Uploads von Dokumenten, die das gleiche Problem aufweisen.
Wie ist denn die Vorgehensweise, wenn ich HTML-Tags rausrendere? Es gibt da ein paar Servercontrols in meinem Projekt.
Dann gilt das selbe Problem bei Zugriffen auf Webmethoden per Javascript. Z.B. habe ich eine Routine, die, je nach Userkonfiguration, aus einer Datenbank ein Feld holt, wo ein Pfad auf eine Webmethode hinterlegt ist, die dann beim Rendern in ein Control als Javascript-Methode rausgeschrieben wird.
Dadurch, dass das Control auf verschiedenen Sites in unterschiedlichen Pfaden auftauchen kann, ist's Essig mit einem relativen Pfad.
Gruß
Thomas
-
Hallo Thomas,
Die Mappath-Geschichte, dabei geht es um Uploads von Dokumenten, die das gleiche Problem aufweisen.
Wie ist denn die Vorgehensweise, wenn ich HTML-Tags rausrendere? Es gibt da ein paar Servercontrols in meinem Projekt.
Dann gilt das selbe Problem bei Zugriffen auf Webmethoden per Javascript. Z.B. habe ich eine Routine, die, je nach Userkonfiguration, aus einer Datenbank ein Feld holt, wo ein Pfad auf eine Webmethode hinterlegt ist, die dann beim Rendern in ein Control als Javascript-Methode rausgeschrieben wird.
wie gesagt, serverseitig kannst Du in den allermeisten Fällen (auch bei Server.MapPath) mit ~/Images/Abc.jpg o.ä. arbeiten, das wird dann korrekt umgesetzt.
Wenn Du selbst eine Ausgabe erzeugst, die die richtigen Pfade beinhalten muss, gibt es noch ResolveClientUrl bzw. ResolveUrl. Diesen Methoden kannst Du auch einen Pfad im Format ~/Images/Abc.jpg übergeben, diese geben dir dann bspw. /Anwendungsordner/Images/Abc.jpg oder auch ../Images/Abc.jpg, ... zurück. Siehe dazu:
http://www.andornot.com/blog/post/ResolveUrl-vs-ResolveClientUrl.aspx
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Thomas Ehlert Mittwoch, 20. Juli 2011 08:44