sabato 12 luglio 2008

Gestione degli errori nelle pagine ASP.Net

In generale, come vengono gestiti gli errori nelle pagine ASP .NET?

Un modo è, nel Global.asax, intervenire nell'evento onError e fare un server transfer a pagine apposite per errori, tipicamente errore 500 ed errore 404.
Sempre in questo evento, magari, ci si può far una mail in modo da essere allertati se il sito non funziona.

La cosa migliore, però, è creare un HttpModule che intercetta l'evento error:

C#
public class ErrorModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.Error += new System.EventHandler(context_Error);
    }

    private void context_Error(object sender, System.EventArgs e)
    {
        Exception exception = HttpContext.Current.Server.GetLastError();
    }

    public void Dispose()
    {
    ...
    }
}

VB.Net
Public Class ErrorModule
    Inherits IHttpModule

    Public Sub Init(ByVal context As HttpApplication)
        AddHandler context.Error, AddressOf Me.context_Error
    End Sub

    Private Sub context_Error(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim exception As Exception = HttpContext.Current.Server.GetLastError
    End Sub

    Public Sub Dispose()
        ...
    End Sub
End Class

e quindi registrarlo nel Web.config:

<system.web>
    <httpModules>
        <add name="ErrorModule" type="ErrorModule" />
    </httpModules>
</system.web>



Gli HttpModules sono "il modo migliore" in quanto consentono riusabilità ed è possibile abilitarli o disabilitarli dal Web.config, senza ricompilare. Inoltre usando il Global.asax viene meno la modularità dell'applicazione Web.