10

Come suggerito elsewhere, sto utilizzando redirectMode = ResponseRewrite nella mia configurazione degli errori personalizzati, quindi la mia pagina di errore personalizzata può accedere alle informazioni sulle eccezioni. Questo ha funzionato come un fascino per qualche tempo.Perché HttpContext.Session è null quando redirectMode = ResponseRewrite

Nell'aggiunta di alcune funzionalità di tipo "aiuta l'utente a ripristinare da un errore", abbiamo bisogno di un'informazione che è stata precedentemente memorizzata in Session. Quando ho implementato questo, ho scoperto che le varie strade verso Session terminano in null quando redirectMode = ResponseRewrite, ma sono tutte popolate quando redirectMode = ResponseRedirect (o non definito).

Qualcuno sa perché? Sembra strano che dovremmo scegliere tra avere informazioni sulle eccezioni (ResponseRewrite) o avere Session (ResponseRedirect).

La MSDN article sulla gestione degli errori Rich personalizzato mi dice che sessione è disponibile solo quando il controllo passa è il metodo Server.Transfer, che è quello che ho assunto ResponseRewrite utilizzato sotto il cofano. Evidentemente non è così.

+0

+1 Sto avendo lo stesso identico problema –

+1

Mauricio, non conosco ancora la risposta alla domanda, ma per superarlo, ho tolto l'attributo redirectMode dalla mia configurazione web e inserito la logica personalizzata nel Global.asax Application_Error handler per fare ciò che volevo. Sto sostituendo l'eccezione con un'eccezione di messaggio "user friendly", ma essenzialmente la logica di trasferimento è: if (Context.IsCustomErrorEnabled) { Server.Transfer ("~/Error.aspx"); } Quindi la pagina Error.aspx contiene il codice Page_Load per estrarre l'errore dal contesto e visualizzare il messaggio. – Josh

+0

@Josh, che sembra buono, mettilo in una risposta in modo da poterlo sviare correttamente :-) –

risposta

5

Non conosco ancora la risposta alla domanda, ma per evitarlo, ho tolto l'attributo redirectMode dalla mia configurazione Web e inserito la logica personalizzata nel gestore Global.asax Application_Error per fare ciò che volevo. Sto sostituendo l'eccezione con un'eccezione messaggio "user friendly", ma in sostanza la logica di trasferimento è:

if(Context.IsCustomErrorEnabled)
{
Server.Transfer("~/Error.aspx");
}

Poi nella pagina Error.aspx ha il codice Page Load per tirare l'errore fuori dal contesto e visualizzare il messaggio .