Logo UGIdotNET

Usare Response.Redirect in un blocco Try...Catch

Se si ha un blocco di codice del tipo:

/*  CODICE 1  */
....
Try
  SmtpMail.Send(oMailMsg)
  Response.Redirect("grazie.aspx")
Catch e As Exception
  Response.Redirect("errore.aspx")
End Try
...

verrà sollevata un'eccezione: "Thread Annullato" durante l'esecuzione dell'istruzione Response.Redirect("grazie.aspx"). Allo scattare dell'eccezione, verrà eseguito anche il blocco "Catch", provocando quindi l'esecuzione dell'istruzione Response.Redirect("errore.aspx"). Nonostante l'istruzione di invio dell'e-mail abbia svolto correttamente il suo compito, la pagina esibita dopo l'invio sarà quella recante un avviso d'errore. Questo comportamento avviene per design, poichè avviene una chiamata interna a Response.End
Per ovviare a questo comportamento bisogna utilizzare l'overload del metodo Redirect() come nel seguente esempio

Se si ha un blocco di codice del tipo:

/*  CODICE 2  */
....
Try
  SmtpMail.Send(oMailMsg)
  Response.Redirect("grazie.aspx", False)
Catch e As Exception
  Response.Redirect("errore.aspx", False)
End Try
...

Impostando a False il secondo parametro del metodo Redirect() la pagina terminerà l'esecuzione immediatamente e si aggirerà questo fastidioso inconveniente.
Per ulteriori approfondimenti consultare il Microsoft Knowledge Base:
PRB312629: http://support.microsoft.com/default.aspx?scid=kb;EN-US;312629
e
Q307903: http://support.microsoft.com/default.aspx?scid=kb;en-us;Q307903

Autore: Andrea Scarmagnani
Data: 16 marzo 2003
Ultimo aggiornamento: 23 luglio 2004
Categorie: 

© 2001 User Group Italiano UGIdotNET. Tutti i diritti riservati. Note legali. - Partita IVA 01927050185