Procedura: gestire errori a livello di applicazione
Aggiornamento: novembre 2007
Nell'esempio di codice riportato di seguito viene illustrato come creare un gestore errori nel file Global.asax in grado di rilevare tutti gli errori non gestiti di ASP.NET durante l'elaborazione di una richiesta, ovvero tutti gli errori non rilevati mediante un blocco Try/Catch o in un gestore errori a livello di pagina. Nell'esempio il gestore trasferisce il controllo a una pagina di errore generica, denominata GenericErrorPage.aspx, che interpreta l'errore e visualizza il messaggio appropriato.
Esempio
L'esempio riportato di seguito è preso da un esempio di codice completo in Esempio completo di gestori di errori.
Per attivare il gestore eventi dell'errore nel file Global.asax, nel file Web.config non è possibile specificare un file per defaultRedirect. Il file di configurazione ha la precedenza. Pertanto, è possibile impostare customErrors su Off o rimuovere l'impostazione defaultRedirect. Se nel file di configurazione Web.config customErrors è impostato su Off, il gestore eventi Application_Error in Global.asax elaborerà tutti gli errori non gestiti.
Nota sulla sicurezza: |
---|
Non impostare mai customErrors su Off nel file Web.config se non è presente un gestore Application_Error nel file Global.asax. È possibile che chi sia in grado di causare un errore nel sito venga a conoscenza di informazioni potenzialmente compromettenti sul sito Web. |
Programmazione efficiente
È consigliabile utilizzare i blocchi Try/Catch per racchiudere codice soggetto a errori piuttosto che fare affidamento su un gestore errori globale.
Un gestore errori definito nel file Global.asax rileva solo gli errori che si verificano durante l'elaborazione delle richieste da parte del runtime ASP.NET. Ad esempio, rileverà l'errore se un utente richiede un file ASPX che non esiste nell'applicazione, ma non rileverà l'errore se un utente richiede un file HTM non esistente. Per gli errori non relativi ad ASP.NET è possibile creare un gestore personalizzato in Internet Information Services (IIS), che non verrà però chiamato per errori a livello di server.
Non è possibile generare informazioni sugli errori di output direttamente dal file Global.asax, bensì è necessario trasferire il controllo a un'altra pagina, generalmente una pagina Web Form. Durante il trasferimento del controllo a un'altra pagina, utilizzare il metodo Transfer per mantenere il contesto corrente in modo da potere ottenere informazioni sugli errori dal metodo GetLastError.
Dopo avere gestito un errore, è necessario cancellarlo chiamando il metodo ClearError dell'oggetto Server (classe HttpServerUtility).
Sicurezza
Accertarsi di non visualizzare informazioni sugli errori utilizzabili da utenti malintenzionati per compromettere l'applicazione. Per informazioni dettagliate, vedere Procedura: visualizzare messaggi di errore protetti.
Vedere anche
Attività
Procedura: gestire errori a livello di pagina