L'errore di ASP.NET in formato HTML

di Antonio Petrocelli, in ASP.NET, global.asax, VB.NET,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi