Prendendo spunto dallo script #376 ho cercato di implementare la gestione degli errori sfruttando lo stesso punto di partenza.
Il tutto ha funzionato perfettamente ma, a causa della mia brevissima esperienza con ASP.NET in particolare e col mondo dello sviluppo web in generale, ho incontrato non poche difficoltà nel comprendere il significato delle specifiche degli errori forniti dal metodo Server.GetLastError.
Il risultato dello script infatti è l'invio, al webmaster, di una mail difficilmente comprensibile per sviluppatori alle prime armi come me.
Non volevo però rinunciare alla gestione degli errori effettuata in questa maniera anche perchè uso un sistema molto simile nella versione attuale del mio sito, sviluppato in asp e vbscript, sistema che mi è molto utile e soprattutto lo è stato nella messa a punto del sito dopo il rilascio.
Messo da parte l'iniziale sconforto, ho cominciato a rovistare nel SDK del .NET framework ed ho trovato l'utilissima classe HttpException che espone un metodo, GetHtmlErrorMessage, che, guarda caso, è la stesso che usa ASP.NET per mostrare quella dettagliata pagina di errore con tanto di indicazione della riga che ha generato l'eccezione su un bel fondino giallo e due comodissimi link "Mostra dettagli dell'output del compilatore" e "Mostra origine di compilazione completa".
Dall'SDK si ottiene infatti che la classe HttpException fornisce un mezzo per generare eccezioni HTTP ed il metodo GetHtmlErrorMessage restituisce il messaggio di errore HTTP da ritrasmettere al client.
Ho quindi provveduto a modificare lo script in maniera da trasformarlo così:
<SCRIPT LANGUAGE="VB" RUNAT="SERVER"> Public Sub Application_OnError(Sender as Object, E as EventArgs) ' Istanzio l'eccezione Http e le assegno il valore dell'ultimo ' errore verificatosi sul server grazie al metodo Server.GetLastError Dim ex as HttpException = Server.GetLastError() ' quindi compongo il Body della mail che conterrà, grazie a ' HttpException.GetHtmlErrorMessage, tutti i dati che mi interessano ' sull'errore e la sua provenienza Dim Message as String Message = ex.GetHtmlErrorMessage ' e lo invio Dim myMail As New System.Web.Mail.MailMessage myMail.From = "webmaster@sito.it" myMail.To = "webmaster@sito.it" myMail.Subject = "Errore 500-100 ASPX" myMail.BodyFormat = MailFormat.Html myMail.Body = Message System.Web.Mail.SmtpMail.Send(myMail) ' ripulisco l'oggetto server dall'ultimo errore ... Server.ClearError() ' ... quindi reindirizzo ad una generica pagina di errore da mostrare ' all'utente Server.Transfer("/error.aspx") End Sub 'Application_OnError </SCRIPT>
Un paio di osservazioni: inviando la mail in formato Text anzichè HTML possiamo vedere il codice HTML che genera questo script ed eventualmente modificarne la formattazione come meglio preferiamo con una semplice serie di replace sulla stringa "Message" che è il Body della mail. Così come possiamo cambiarne la formattazione possiamo anche inserire informazioni aggiuntive come lo Username ed il Role di appartenenza dell'Utente, se il nostro sito prevede l'autenticazione oppure il tipo di browser usato dal navigatore, il suo IP e così via.
Per lo script #376 - Intercettare gli errori in pagine ASP.NET con il global.asax
https://www.aspitalia.com/liste/usag/script.aspx?ID=376
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.