ASP.NET fornisce un modo semplice ma potente per trattare gli errori che si verificano nelle applicazioni web.
A livello di pagina, è possibile utilizzare il metodo OnError. Questo perchè la classe Page deriva da System.Web.UI.Page e l'oggetto Page consente di intercettare gli errori a livello di pagina.

                        
Private Sub Page_Error(ByVal sender As Object, ByVal e As EventArgs)
    ' Recupera l'ultimo errore
    Dim exc As Exception = Server.GetLastError

    ' Gestione delle eccezioni
    If TypeOf exc Is InvalidOperationException Then
        ' Trasferisce il controllo alla pagina di errore PaginaErroreIOE.aspx
        Server.Transfer("PaginaErroreIOE.aspx", True)
    ElseIf TypeOf exc Is ArgumentOutOfRangeException Then
        ' Do all'utente qualche informazione sull'errore stando sulla stessa pagina
        Response.Write(exc.Message.ToString)
        'Pulisco l'errore 
        Server.ClearError()
    Else
        ' Altra condizione di errore ...
    End If
End Sub                
                    

Questo funziona per una sola pagina.

Per renderlo operativo a livello di applicazione bisogna agire sui files Web.config e Global.asax.

                        
<configuration>
  <appSettings/>
  <connectionStrings/>
  <system.web>
    <compilation debug="true" />
    <customErrors mode="On" defaultRedirect="PaginaDiDefaultErrore.aspx">
      <error statusCode="404" redirect="404.aspx"/>
    </customErrors>
  </system.web>
</configuration>  
                    

Nella sezione customErrors del Web.config viene specificato come gestire gli errori che si verificano nell'applicazione.
Nell'esempio, gli errori non gestiti HTTP 404 (file non trovato) vengano indirizzati al file 404.aspx. Questi errori HTTP 404 si verificano se viene effettuata la richiesta di un file aspx, asmx e così via e il file richiesto non esiste.
Tutti gli altri errori non gestiti nei file ASP.NET vengono indirizzati al file PaginaDiDefaultErrore.aspx.

Sempre nell'esempio, l'attributo mode di customErrors è impostato su "On". Le possibili configurazioni sono:
- On: i dettagli di errore non sono visualizzati a nessuno, anche gli utenti locali. Se è stata specificata una pagina di errore, questa verrà sempre utilizzata (nell'esempio PaginaDiDefaultErrore.aspx).
- Off: tutti possono vedere i dettagli dell'errore, sia locali che utenti remoti.
Attenzione!! Non impostare mai l'attributo su "Off" se non è stato creato un gestore di Application_Error nel file Global.asax in quanto, per chiunque, è possibile venire a conoscenza di informazioni potenzialmente compromettenti sul sito stesso.
- RemoteOnly: se una richiesta viene effettuata in localhost, ASP.NET esegue il rendering della pagina con le informazioni dettagliate sull'errore (traccia dello stack e i dettagli di compilazione); agli utenti remoti, invece, verrà presentata una pagina concisa con una notifica che si è verificato un errore.

All'interno del file Global.asax andremo a scrivere codice nell'evento Application_Error

                        
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
    ' Trasferisce il controllo alla pagina di errore PaginaErroreIOE.aspx
    Server.Transfer("PaginaErroreIOE.aspx", True)
End Sub