Newsgroup: it.comp.dotnet
Titolo: [asp.net]Forzare redirect

Salve a tutti,
qual è il modo migliore per forzare la redirect verso una pagina al
verificarsi di una condizione?
Ho provato a sviluppare un semplice HTTPHandler che intercetti tutte
le chiamate, ma senza successo.
Qualche suggerimento?
Grazie a tutti per la collaborazione.
Francesco

 verificarsi di una condizione?
Non va bene un semplice Response.Redirect?
-LV


Troppo semplice ;-)
Il problema è che la Response.Redirect devo gestirla in tutte le
pagine...
Sto vedendo se aggiro l'ostacolo implementando una classe che eredita
da Page e che implementa i controlli.
Poi le mie pagine.aspx, invece di implementare Page, implementeranno
la nuova classe...
Francesco


È la soluzione più ovvia e semplice.
Cosa non ti funziona?
Potresti aver sbagliato la dichiarzione nel web.config ...
-- 
Raffaele Rialdi  
http://www.iamraf.net
Weblog: 
http://blogs.ugidotnet.org/raffaele
Microsoft MVP profile 
https://mvp.support.microsoft.com/profile/raffaele
UGIdotNET - 
http://www.ugidotnet.org/

 Cosa non ti funziona?
Alla fine ho risolto in questo modo:
            If condizione Then
                handler =
PageParser.GetCompiledPageInstance(GetCurrentPageName(context),
Nothing, context)
                handler.ProcessRequest(context)
            Else
                handler =
PageParser.GetCompiledPageInstance("LoginMember.aspx", Nothing,
context)
                handler.ProcessRequest(context)
            End If
"GetCurrentPageName" restituisce il nome della pagina dal context
corrente.
Comunque volevo provare con la classe che estende Page.
Grazie...


 da Page e che implementa i controlli.
Un HttpModule mi sembrerebbe la soluzione piu' appropriata e pulita.
-LV

 Comunque volevo provare con la classe che estende Page.
Se vuoi gestire qualsiasi tipo di richiesta, concordo con Ludivico che 
httpmodule è il più indicato.
Se vuoi che 
asp.net
 "scremi" per te la richiesta perché la vuoi 
limitare alle sole aspx allora può bastare un handler.
Quando usi una di queste due soluzioni sei in mezzo alla pipeline di 
asp.net
 e devi quindi scrivere il codice per ridare il controllo 
all'handler di default se non puoi/vuoi gestire la tua richiesta.
Per farlo tipicamente si usa:
(IHttpHandler)BuildManager.CreateInstanceFromVirtualPath(..., ...)
che in pratica crea l'handler di default di competenza della richiesta 
corrente.
In questo modo intercetti qualsiasi richiesta (ad esempio aspx), fai 
quello che devi fare (log?, altro?) e poi lasci che l'handler di 
default prosegua la sua strada.
-- 
Raffaele Rialdi  
http://www.iamraf.net
Weblog: 
http://blogs.ugidotnet.org/raffaele


 all'handler di default se non puoi/vuoi gestire la tua richiesta.
Se non ti sto fraintendendo, non e' necessario interferire con l'usuale flow della richiesta con un HttpModule: in particolare, l'handler target della richiesta viene invocato come di solito senza ulteriori interventi, a meno sempre di Response.Redirect, etc.
-LV


Vero, dipende dai casi.
Per esempio io uso un http module per generare automaticamente una 
pagina html che contiene i tag html 'link' usati da live writer per 
sapere dove si trova il mannifest e il documento rsd.
Il module è più comodo anche per semplificare la configurazione nel 
web.config
In questo caso dentro l'evento PreRequestHandlerExecute gli passi 
l'handler.
L'handler tipicamente è il risultato di una 
CreateInstanceFromVirtualPath oppure un'istanza della classe Page (che 
è un IHttpHandler e quindi fa il suo lavoro).
