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.
Approfondimenti
Abilitare e gestire il prerendering nelle applicazioni Blazor WebAssembly
Eseguire del codice personalizzato al click di una checkbox in Blazor
.NET Conference Italia 2020
Un componente per gestire lo stato della connessione di rete in Blazor WebAssembly
Effettuare il tracing asincrono delle chiamate a un'applicazione ASP.NET Core
Registrare un servizio generico nella dependency injection di ASP.NET Core
L'agenda di #netconfit è online => https://aspit.co/netconfit-20 3 track, tante sessioni e una keynote speciale di @shanselman per la più importante conferenza in lingua italiana su .NET! Vi aspettiamo il 24/11. Iscrizioni sempre aperte! #donet #aspnet #netconf
Testare le impostazioni CORS di un'applicazione ASP.NET Core
Abilitare la configurazione fortemente tipizzata in Blazor
Eseguire lo shutdown pulito di un'applicazione ASP.NET Core
Un pattern per gestire il pre-rendering in componenti Blazor complessi