Il existe trois aspects de la gestion des exceptions dans ASP.NET :
Traçage - Traçage de l'exécution du programme au niveau de la page ou de l'application.
Gestion des erreurs : gérez les erreurs standard ou personnalisées au niveau de la page ou de l'application.
Débogage - Avancez dans le programme et définissez des points d'arrêt pour analyser le code.
Dans ce chapitre, nous discuterons du traçage et de la manipulation. Et dans ce chapitre, nous aborderons le débogage.
Pour comprendre les concepts, créez l’exemple d’application suivant. Il comporte un contrôle d'étiquette, une liste déroulante et un lien. La liste déroulante charge un tableau de citations et la citation sélectionnée sera affichée dans l'étiquette ci-dessous. Il contient également un lien hypertexte qui pointe vers un lien qui n’existe pas.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="errorhandling._Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional// FR" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title> Traçage, débogage et gestion des erreurs </title> </head> <body> <form id= "form1" runat="server"> <div> <asp:Label ID="lblheading" runat="server" Text="Traçage, débogage et gestion des erreurs"> </asp:Label> <br /> <br / > <asp:DropDownList ID="ddlquotes" runat="server" AutoPostBack="True" onselectedindexchanged="ddlquotes_SelectedIndexChanged"> </asp:DropDownList> <br /> <br /> <asp:Label ID="lblquotes" runat= "serveur"> </asp:Label> <br /> <br /> <asp:HyperLink ID="HyperLink1" runat="serveur" NavigateUrl="mylink.htm">Lien vers :</asp:HyperLink> </div> </form> </body></html>
Code après fichier :
public partial class _Default : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string[,] quotes = { {"L'imagination est plus importante que la connaissance.", "Albert Einsten"}, {"Assumez une vertu, si vous ne l'avez pas" "Shakespeare"}, {"Un homme ne peut pas être à l'aise sans sa propre approbation", "Mark Twain"}, {"Attention au jeune médecin et au vieux barbier", "Benjamin Franklin"}, {"Tout ce qui commence dans la colère finit dans la honte", "Benjamin Franklin"} } for (int i=0; i<quotes.GetLength(0 ); i++) ddlquotes.Items.Add(new ListItem(quotes[i,0], quotes[i,1])); ddlquotes_SelectedIndexChanged(objet expéditeur, EventArgs e) { if (ddlquotes.SelectedIndex != -1) { lblquotes.Text = String.Format("{0}, Quote : {1}", ddlquotes.SelectedItem.Text, ddlquotes.SelectedValue) ; } }}
Pour autoriser le traçage au niveau de la page, vous devez modifier la directive Page et ajouter un attribut Trace comme suit :
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="errorhandling._Default" Trace ="true" %>
Désormais, lorsque vous exécuterez le fichier, vous obtiendrez des informations de trace :
Il fournit les informations suivantes dans l'en-tête :
ID de session
Code d'état
Heure de la demande
Type de demande
Encodage des requêtes et des réponses
Chaque fois que la page est demandée, le code d'état envoyé depuis le serveur affiche le nom et l'heure de l'erreur, le cas échéant. Le tableau suivant présente les codes d'état HTTP courants :
nombre | décrire |
---|---|
Notification(100 - 199) | |
100 | continuer |
101 | accord de conversion |
Succès(200 - 299) | |
200 | D'ACCORD |
204 | Aucun contenu |
Redirection (300 - 399) | |
301 | déménager définitivement |
305 | Utiliser un proxy |
307 | redirection temporaire |
Erreurs du client (400 - 499) | |
400 | Mauvaise demande |
402 | Exigences de paiement |
404 | pas trouvé |
408 | Expiration du délai de demande |
417 | Attendez-vous à échouer |
Erreur du serveur (500 - 599) | |
500 | Erreur interne du serveur |
503 | Service non disponible |
505 | Version HTTP non prise en charge |
Sous les informations de niveau supérieur se trouve un journal de trace, qui fournit des détails sur le cycle de vie de la page. Il fournit le temps écoulé en secondes depuis l'initialisation de la page.
La section suivante est l'arborescence des contrôles, qui répertorie tous les contrôles de la page dans un format hiérarchique :
La dernière déclaration dans Session et Application est la collection de résumés, de cookies et d'en-têtes suivis de toutes les variables du serveur.
Les objets de trace vous permettent d'ajouter des informations personnalisées à la sortie de trace. Il dispose de deux méthodes à compléter : la méthode Write et la méthode Warn.
Modifiez le gestionnaire d'événements Page_Load pour détecter la méthode Write :
protected void Page_Load (expéditeur de l'objet, EventArgs e) { Trace.Write ("Chargement de la page"); if (!IsPostBack) { Trace.Write ("Pas de publication, chargement de la page"); .............. }}
Courez pour voir l’impact :
Pour détecter la méthode Warn, forçons un code d'erreur dans le gestionnaire d'événements de modification d'index sélectionné :
try{ int a = 0; int b = 9 / a;}catch (Exception e){ Trace.Warn("UserAction", "processing 9/a", e);}
Try-Catch est une construction de programmation C#. Le bloc try contient tout code pouvant ou non générer une erreur, et le bloc catch capture l'erreur. Lorsque le programme s'exécute, il envoie des avertissements dans le journal de trace.
Le suivi au niveau de l'application s'applique à toutes les pages du site Web. Il est implémenté en plaçant le code suivant dans le fichier web.config :
<system.web> <trace activé="true" /></system.web>
Bien qu'ASP.NET détecte toutes les erreurs d'exécution, il reste encore quelques petites erreurs. L'observation des erreurs via le traçage est destinée aux développeurs et non aux utilisateurs.
Par conséquent, pour éviter que cela ne se produise, vous pouvez ajouter des paramètres de résolution d’erreurs dans le fichier web.config de votre application. Il s’agit d’une résolution d’erreurs à l’échelle de l’application. Par exemple, vous pouvez ajouter le code suivant au fichier web.config :
<configuration> <system.web> <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm"> <error statusCode="403" redirect="NoAccess.htm" /> <error statusCode="404" redirect="FileNotFound .htm" /> </customErrors> </system.web><configuration>
Certains des attributs possibles : - **Mode :** Il autorise ou interdit les pages d'erreur personnalisées. Il a trois valeurs possibles : - **On :** Afficher une page personnalisée. - **Désactivé :** Affiche la page d'erreur ASP.NET (page jaune) - **remoteOnly :** Il affiche les erreurs personnalisées au client, affichant les erreurs ASP.NET locales. - **defaultRedirect:** Il contient l'URL de la page à afficher en cas d'erreurs non résolues. Afin de placer différentes pages d'erreur personnalisées pour différents types d'erreurs, des sous-balises sont utilisées, où différentes pages d'erreur sont spécifiées en fonction du code d'état de l'erreur. Afin d'obtenir une résolution des erreurs au niveau de la page, la directive Page peut être modifiée comme suit : `````` Le débogage ASP.NET étant un sujet important, nous en discuterons séparément dans le chapitre suivant.