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ì.
+1 Sto avendo lo stesso identico problema –
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
@Josh, che sembra buono, mettilo in una risposta in modo da poterlo sviare correttamente :-) –