Ciao,
chida ha scritto:
ma da errore perchè fa riferimento ad un url virtuale
Esatto, asp.net cerca quel percorso su disco, come se esistesse un file fisico con quel nome. Ma ovviamente non lo trova, e va in errore.
A questo punto pensavo di poter ingannare asp.net con un
VirtualPathProvider ma è una strada senza uscita perché se il percorso orginale non ha un'estensione è impossibile mapparlo al PageHandlerFactory. (Cioè, magari la pagina la trova ma poi non riesce ad istanziarla).
Allora ho pensato che forse si potrebbe risolvere il problema a monte.
Se ci fai caso, nell'output di pagina appare un campo hidden chiamato __PREVIOUSPAGE. Eccone uno di esempio:
<input type="hidden" name="__PREVIOUSPAGE" id="__PREVIOUSPAGE" value="ngEp2YP6IRx88bdSkUSzYpROdpVBPV97TOqceYKSEBJsKvmtdwIxvzK6gf_shCbmyB-A2lV_p4gCm6berZHosZwVwAkRM0emw9xPn17nM601" />
Il percorso virtuale è memorizzato lì dentro, sarebbe l'ideale se lo si potesse riscrivere ma è crittato e questo rappresenta una difficolta in più.
Procediamo per gradi, vedrai che si riesce a risolvere.
Per prima cosa bisogna che troviamo un sistema per riscriverlo. L'oggetto Response dispone di una proprietà
Filter che ti dà un'opportunità per analizzare (ed eventualmente manipolare) l'ouput HTML prodotto dalla pagina, prima che venga inviato al client.
Leggi questo articolo di Andrea Zani, ti mostra come puoi modificare l'output.
http://www.aspitalia.com/articoli/asp.net/responsefilter.aspxIn teoria può funzionare: mi estrapolo il valore del __PREVIOUSPAGE con un'espressione regolare, lo modifico e poi lo sostituisco a quello originale.
Resta il problema della crittografia. Una pagina Asp.Net usa il suo metodo EncryptString per produrre quelle stringhe ma sfortunatamente non lo puoi usare perché è un metodo internal.
Allora ho provato a cercare su internet una funzione che potesse produrre le stesse stringhe crittografate. C'è, eccola qui:
http://www.codeproject.com/Articles/36822/ASP-NET-data-encryption-decryption-made-easyOra hai tutti gli strumenti per manipolare il __PREVIOUSPAGE e fare in modo che in esso compaia sempre il nome di un file fisico, anche se la richiesta web usava uno dei percorsi sottoposti ad url rewriting.
Anche un altro utente il mese scorso ha avuto la tua stessa necessità e, siccome sembra un problema comune, ho preparato questo progetto da scaricare. Contiene né più né meno quello di cui ti ho parlato ora.
Progetto Routing-PreviousPageciao
Modificato da BrightSoul il 30 giugno 2012 13.30 -