Dati personalizzati Elmah YSOD
Domanda
Sto usando Elmah con ASP.NET e mi chiedo come aggiungerei dati personalizzati, come una variabile di sessione, a un'e -mail di eccezione non gestita.
Ho provato diversi gestori nel file global.asax ma non riesco a trovare quello giusto.
Soluzione
Per questo, penso che dovresti modificare Elmah fonte e ricompilare. Non dovrebbe essere troppo difficile da raggiungere. Se dai un'occhiata nel costruttore del Elmah.Error
classe, il HttpContext
viene passato, da cui dovresti essere in grado di ottenere le informazioni di cui hai bisogno, ad esempio sessione, variabili di modulo ecc. Potresti aggiungere campi personalizzati al Elmah.Error
Classe per questi dati
Penso che la Elmah.ErrorMailHtmlFormatter
La classe è dove l'e -mail è costruita utilizzando un HtmlTextWriter
, e qui potresti inserire il codice in RenderSummary()
metodo per includere i campi personalizzati a cui hai aggiunto Elmah.Error
.
So che potrebbe essere un dolore iniziare a lavorare con la fonte, ma personalmente penso che sia il modo più pulito in quanto attualmente non esiste una struttura per i modelli di report/e -mail, ed è meglio che imbullonare qualcosa per cambiare l'output dopo essere stato generato.
Altri suggerimenti
La risposta di Andrew ha aiutato molto, grazie. Ho finito per fare quanto segue:
- Aggiunto un evento on -building al modulo HTTP Errormail. L'evento Arg per questo evento ha una proprietà NameValueCollection.
- Ho gestito l'evento di Onbuilding in Global.asax.
- Poiché HttpModules non ha sempre accesso a SessionState, esp. Se si verifica l'eccezione prima della carica di sessione, ho copiato i dati che volevo riportati nella cache HTTPAPPLICATION (indicizzata da SessionID).
- Quando si verifica un'eccezione, prendo i dati che desidero uscire dalla cache dell'applicazione tramite la sessione memorizzata nella richiesta (in particolare nel cookie). Genera un nomevalueCollection da questi dati e lo invia a HTTPModule tramite gli args di Onbuilding.
- I dati vengono quindi resi all'e -mail in modo simile a come viene resa la sezione variabili del server.