none
Pfade und virtuelle Verzeichnisse RRS feed

  • 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

     

    Dienstag, 19. Juli 2011 20:06

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
    Mittwoch, 20. Juli 2011 07:44
    Moderator

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
    Dienstag, 19. Juli 2011 20:40
    Moderator
  • 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

    Mittwoch, 20. Juli 2011 07:33
  • 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
    Mittwoch, 20. Juli 2011 07:44
    Moderator
  • Hallo Stefan,

    ResolveClientUrl hatte ich auch schon auf dem Radar. Muss ich wohl doch durch die komplette Applikation durch und schauen wo es mglw. haken könnte.

    Gruß und besten Dank

    Thomas

    Mittwoch, 20. Juli 2011 08:46