ASP.MapPath classico () non funziona come previsto in global.asa
-
20-08-2019 - |
Domanda
Nell'ASP classico, Server.MapPath () non sempre funziona correttamente nell'evento Application_OnStart all'interno di global.asa . Ho una pagina ASP in & Quot; \ testfolder \ test.asp & Quot; all'interno di una radice virtuale, ho un file XSLT in & Quot; \ xsl \ transform.xsl quot &; . La mia radice virtuale si trova in & Quot; c: \ inetpub \ wwwroot \ testapp \ & Quot; .
Uso MapPath nella pagina ASP per ottenere il percorso completo del file XSLT. La chiamata è:
sXslPath = Server.MapPath("xsl\transform.xsl")
Alcune volte MapPath restituisce " c: \ inetpub \ wwwroot \ testapp \ xsl \ transform.xsl " come previsto, altre volte restituisce in modo errato < !> quot; c: \ inetpub \ wwwroot \ testapp \ testfolder \ xsl \ transform.xsl <> quot; !. Il percorso errato ovviamente causa seri problemi.
Soluzione
Sto rispondendo alla mia domanda qui:
Questo problema si verifica perché quando chiamato in Application_OnStart , MapPath include erroneamente il contesto della pagina che ha causato l'avvio dell'applicazione. Se la prima pagina ASP da eseguire quando l'applicazione non è ancora stata avviata non si trova nella radice della radice virtuale, MapPath viene confuso e aggiunge il percorso alla pagina ASP chiamata al percorso che restituisce .
Ad esempio, se la pagina che ha avviato l'app era in " c: \ inetpub \ wwwroot \ testapp \ folder1 \ folder2 \ test.asp " quindi MapPath aggiungerebbe erroneamente " \ folder1 \ folder2 " nel mezzo del percorso e restituire " c: \ inetpub \ wwwroot \ testapp \ folder1 \ folder2 \ xsl \ transform.xsl quot &;
Se il tuo sito Web contiene solo file nella cartella principale o non utilizza MapPath in global.asa , non noterai mai questa piccola stranezza. Ho il sospetto che ci siano molti siti ASP Classic là fuori che a volte non riescono ad avviarsi correttamente a causa di questo, ma i loro proprietari fanno solo un rapido iisreset, non sapendo cosa è andato storto.
Il risultato è che non è possibile utilizzare in modo affidabile MapPath in global.asa se si dispone di un sito Web che contiene file ASP in qualsiasi luogo diverso dalla cartella principale .
Se si tratta di un sito Web unico, la soluzione più semplice è semplicemente codificare qualsiasi percorso che usi in global.asa .
Se vendi un prodotto ad altre persone in base ad ASP Classic, la codifica effettiva dei percorsi non è un'opzione. Devi spostare qualsiasi utilizzo di MapPath dall'avvio dell'applicazione o affrontare il problema scrivendo i percorsi nei file ASP come parte del programma di installazione.
Altri suggerimenti
usa alternativamente sXslPath = Server.MapPath (" \ xsl \ transform.xsl ")
che quindi mapperà il percorso dalla directory principale
naturalmente se stai sviluppando su iOS in un sistema operativo che non è un server, root sarà il sito Web predefinito, dovresti ricordare di cambiare al momento della distribuzione ...