Personnaliser les pages d'erreur en ASP.NET

 27/05/2015 |   Admin |  C#

Tags: Erreurs

Au lieu d'avoir les pages d'erreurs par défaut, souvent désagréable à voir par le client, asp.net permet en quelques cliques de personnaliser ces pages.

1) Décommenter la section "customErrors" dans le web.config

et y modifier le nom des fichiers, on peut y placer aussi bien des pages html que des pages aspx.

<customErrors mode="On" defaultRedirect="GenericErrorPage.aspx">
<error statusCode="403" redirect="403.aspx" />
<error statusCode="404" redirect="404.aspx" />
</customErrors>

L'attribut "mode" peut prendre 3 valeurs :

On : La gestion des erreurs est activée en local et à distance.

Off : Gestion d'erreurs désactivée.

RemoteOnly : Gestion des erreurs activée seulement à distance, en local se seront les pages par défaut.

2) Créer les pages

Ensuite il faut créer ces pages, soit de façon très simple en mettant une image et le nom de l'erreur ou alors en affichant un message dynamique (voir 3)

3) Personnaliser ses pages d'erreurs

a) Créer une classe "BasePage" qui va hériter de "System.Web.UI.Page"
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Configuration;
 
/// <summary>
/// Description résumée de BasePage
/// </summary>
public class BasePage : System.Web.UI.Page
{
      public BasePage()
{
}
 
protected override void OnError(EventArgs e)
{
Exception ex = Server.GetLastError();
Session["LastError"] = ex.Message;
Response.Redirect("~/GenericErrorPage.aspx");
}
}
b) Faire hériter les pages utilisant cette gestion d'erreur par "BasePage" et non plus par "System.Web.UI.Page"
c) Commenter ou supprimer le corps de la méthode Application_Error dans le Global.asax
d) Modifier la page d'erreur générique :
protected void Page_Load(object sender, EventArgs e)
{
if (Session["LastError"] != null)
{
lblMessage.Text = Session["LastError"].ToString();
}
}
e) Voici à quoi peut ressembler votre page désormais :

 

f) Type de message

Le message peut-être plus ou moins développé en fonction du type de visiteurs (Si c'est un site grand public, on évitera de décrire l'erreur avec toute la stackTrace par exemple!)