Comment faire pour créer des erreurs personnalisées dans ASP.NET, les pages de création de rapports à l'aide de Visual C# .NET

Traductions disponibles Traductions disponibles
Numéro d'article: 306355 - Voir les produits auxquels s'applique cet article
Ancien nº de publication de cet article : F306355
Agrandir tout | Réduire tout

Sommaire

Résumé

Cet article décrit comment utiliser le code Visual C# .NET pour intercepter et répondre aux erreurs quand elles se produisent dans ASP.NET. ASP.NET a amélioré les options à partir de Microsoft Active Server Pages (ASP) traditionnelles de gestion des erreurs. Dans ASP.NET, vous pouvez gérer des erreurs à différents niveaux dans vos applications.

Nouvelles fonctionnalités dans ASP.NET

ASP.NET propose plusieurs fonctionnalités avancées dans la façon dont vous pouvez gérer et répondre aux erreurs. Dans les pages ASP traditionnelles, vous gérez les erreurs avec « On Error Resume Next » (ou les blocs try-catch dans JScript). Alternativement, si vous exécutez Microsoft Internet Information Services (IIS) 5.0, vous devez utiliser l'objet ASPError pour créer une page de rapport d'erreurs personnalisée. Toutefois, ces approches ont leurs limitations.

ASP.NET fournit plusieurs niveaux à partir duquel vous pouvez gérer et répondre aux erreurs qui peuvent se produire lorsque vous exécutez une application ASP.NET. ASP.NET fournit trois principales méthodes qui vous permettent d'intercepter et de répondre aux erreurs quand elles se produisent : Page_ErrorApplication_Erroret le fichier de configuration d'application (Web.config).

Cet article explique comment utiliser ces nouvelles fonctionnalités dans votre application ASP.NET. Bien que cet article décrit comment fournir des pages d'erreurs personnalisées et les rapports d'erreurs généraux spécifiquement dans ASP.NET, cet article ne décrit pas les autre approches, telles que le bloc try-catch-finally et au système d'exceptions Common Language Runtime (CLR) de gestion d'erreur.

Comment utiliser la méthode Page_Error

Le Gestionnaire d'événements Page_Error permet d'intercepter les erreurs qui se produisent au niveau de la page. Vous pouvez afficher simplement des informations d'erreur (comme l'exemple de code à suivre), ou vous pouvez enregistrer l'événement ou effectuer une autre action.

Remarque : Cet exemple affiche des informations d'erreur détaillées dans le navigateur uniquement à des fins de démonstration. Vous devez être prudent lors de l'affichage des informations détaillées à l'utilisateur final de l'application, en particulier lorsque l'application s'exécute sur Internet. Une action plus appropriée serait d'afficher un message à l'utilisateur informant qu'une erreur s'est produite, puis d'enregistrer les détails sur l'erreur dans le journal des événements.

Cet exemple lève une exception nulle, ce qui provoque une erreur dans le Gestionnaire d'événements Page_Load . Suivez ces étapes pour créer la page initiale qui démontrera l'utilisation du Gestionnaire d'événements Page_Error .
  1. Suivez ces étapes pour ajouter qu'un nouveau fichier nommé PageEvent.aspxto votre projet :
    1. Ouvrez Microsoft Visual Studio .NET.
    2. Dans l'Explorateur de solutions, cliquez droit sur le n?ud du projet, pointez sur Ajouter, puis cliquez sur Ajouter un formulaire Web.
    3. Dans la zone de texte nom , tapez PageEvent.aspx, puis cliquez sur Ouvrir.
  2. Ajoutez le code suivant à PageEvent.aspx :
    <script language=C# runat="server">
    void Page_Load(object sender, System.EventArgs e)
    {
    	throw(new ArgumentNullException());
    }
    
    public void Page_Error(object sender,EventArgs e)
    {
    	Exception objErr = Server.GetLastError().GetBaseException();
    	string err =	"<b>Error Caught in Page_Error event</b><hr><br>" + 
    			"<br><b>Error in: </b>" + Request.Url.ToString() +
    			"<br><b>Error Message: </b>" + objErr.Message.ToString()+
    			"<br><b>Stack Trace:</b><br>" + 
    	                  objErr.StackTrace.ToString();
    	Response.Write(err.ToString());
    	Server.ClearError();
    }
    </script> 
    					

    Remarque : Dans cet exemple, l'attribut AutoEventWireup n'est pas définie explicitement. Si vous ne faites pas explicitement assigna valeur à l'attribut AutoEventWireup , la valeur true par défaut valeur est utilisée. Si vous utilisez Visual Studio .NET pour développer des yourapplications, le code de modèle Web Form définit explicitement la valeur de l'attribut AutoEventWireup à false. Il existe une différence importante entre la valeur de thatASP.NET par défaut utilise, et la valeur par défaut qui le codeassigns de modèle de Visual Studio .NET pour cet attribut. Si la valeur de l'attribut AutoEventWireup est définie sur false, les gestionnaires d'événements qui sont déclarés dans le.ASPX page notfire. Cela peut prêter à confusion si vous ne savez pas sur thisfunctionality.
  3. Dans le menu fichier , cliquez sur Enregistrer PageEvent.aspx.
  4. Avec le bouton droit de la page, puis cliquez sur afficher dans le navigateur pour exécuter la page. Notez que l'erreur est levée et reportedaccording aux spécifications du code.
Remarque : Vous pouvez remarquer que le code émet un appel à Server.ClearError. Cela empêche l'erreur dans le Gestionnaire d'événements Application_Error .

En outre, vous devez également noter l'attribut Inherits dans la directive @ Page . Si Inherits est défini, vous devez générer le projet avant de naviguer jusqu'à la page. Si vous ne générez pas d'abord le projet, le message d'erreur suivant s'affiche :
« Project.PageEvent » n'est pas un type valide

Comment utiliser la méthode Application_Error

Semblable au gestionnaire d'événements Page_Error , vous pouvez utiliser le Gestionnaire d'événements Application_Error pour intercepter les erreurs qui se produisent dans votre application. En raison de la portée de l'application de l'événement, vous pouvez enregistrer des informations d'erreur application ou gérer d'autres erreurs au niveau de l'application qui peuvent se produire.

L'exemple suivant est basé sur l'exemple de code Page_Error précédent et serait déclenché si l'erreur dans Page_Load n'était pas interceptée dans le Gestionnaire d'événements Page_Error . Le Gestionnaire d'événements Application_Error est spécifié dans le fichier Global.asax de votre application. Pour plus de simplicité, les étapes de cette section créent une page dans laquelle lever l'exception, intercepte l'erreur dans le Gestionnaire d'événements Application_Error du fichier Global.asax et écrivent l'erreur dans le journal des événements. Les étapes suivantes montrent comment utiliser la méthode Application_Error :
  1. Ajouter un nouveau fichier appelé AppEvent.aspx à VotreProjet.
  2. Ajoutez le code suivant à AppEvent.aspx :
    <script language=C# runat="server">
    	void Page_Load(object sender, System.EventArgs e)
    	{
    		throw(new ArgumentNullException());
    	}
    </script>
    					

    Remarque : Les informations présentées dans la section "Page_Error" sur l'attribut AutoEventWireup s'applique également à l'exemple de code dans cette étape. Voir information dans la section "Page_Error" pour plus de détails.
  3. Dans le menu fichier , cliquez sur Enregistrer AppEvent.aspx.
  4. Ajoutez le Gestionnaire d'événements Application_Error dans le fichier Global.asax pour intercepter l'erreur qui youthrow dans le Gestionnaire d'événements Page_Load de la page AppEvent.aspx. Notez que vous devez addanother des instruction using pour l'espace de noms System.Diagnostics Global.asax afin d'utiliser le journal des événements.

    Ajoutez le code de réticules du centre au fichier Global.asax :
    using System.Diagnostics;
    
    protected void Application_Error(object sender, EventArgs e)
    {
    	Exception objErr = Server.GetLastError().GetBaseException();
    	string err =	"Error Caught in Application_Error event\n" +
    			"Error in: " + Request.Url.ToString() +
    			"\nError Message:" + objErr.Message.ToString()+ 
    			"\nStack Trace:" + objErr.StackTrace.ToString();
    	EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);
    	Server.ClearError();
    	//additional actions...
    } 
    					
  5. Enregistrez le fichier Global.asax.
  6. Dans Visual Studio .NET, dans le menu Générer , cliquez sur Générer.
  7. Avec le bouton droit de la page, puis cliquez sur afficher dans le navigateur. Dans ce cas la page sera vierge, toutefois, vous devez noticethat qu'une nouvelle entrée a été ajoutée dans le journal des événements. Cet exemple crée une entrée dans le journal d'Application, qui est accessible à partir de l'Observateur d'événements. Après une erreur loggingthe, vous souhaiterez rediriger l'utilisateur vers une autre page plus de friendlyerror de l'utilisateur, ou effectuer des actions supplémentaires si nécessaire.

Comment faire pour utiliser le fichier Web.config

Si vous n'appelez pas Server.ClearError ou interruption l'erreur dans le Page_Error ou Application_Error Gestionnaire d'événements, l'erreur est gérée selon les paramètres dans la section <customErrors>du fichier Web.config. Dans la section <customErrors>, vous pouvez spécifier une page de redirection sous la forme d'une page d'erreur par défaut (defaultRedirect) ou spécifier une page particulière basée sur le code d'erreur HTTP qui est déclenché. Vous pouvez utiliser cette méthode pour personnaliser le message d'erreur reçu par l'utilisateur.

Si une erreur se produit qui n'est pas interceptée à un des niveaux précédents dans votre application, cette page personnalisée s'affiche. Cette section montre comment modifier le fichier Global.asax afin que Server.ClearError n'est jamais appelé. Par conséquent, l'erreur est gérée dans le fichier Web.config comme ultime point pour intercepter l'erreur. </customErrors></customErrors>
  1. Ouvrez le fichier Global.asax de le previousexample.
  2. Commentez la ligne Server.ClearError pour s'assurer que l'erreur apparaît dans le Web.configfile.
  3. Enregistrez vos modifications dans Global.asax. Votre code doit nowappear semblable à la suivante :
    using System.Diagnostics;
    
    protected void Application_Error(object sender, EventArgs e)
    {
    	Exception objErr = Server.GetLastError().GetBaseException();
    	string err =	"Error Caught in Application_Error event\n" +
    			"Error in: " + Request.Url.ToString() +
    			"\nError Message:" + objErr.Message.ToString() + 
    			"\nStack Trace:" + objErr.StackTrace.ToString();
    	EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);
    	//Server.ClearError();
    	//additional actions...
    } 
    					
  4. Ajoutez le code suivant à la <customErrors>section rediriger l'utilisateur vers une page personnalisée :<b00> </b00> </customErrors>
    <customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
    </customErrors>
    						
    Remarque : Vous devez modifier le chemin d'accès de fichier dans l'attribut defaultRedirect de sorte qu'il référence les noms d'andapplication de serveur Web appropriées.
  5. Dans la mesure où les erreurs sont interceptées à ce niveau sont sentto une page d'erreur par défaut, vous devez créer une page d'erreur nommée ErrorStatus.htm.Keep à l'esprit que vous utilisez cette méthode pour contrôler ce qui est présenté aux droits, afin que cet exemple utilise une page .htm pour la page d'erreur. Ajoutez le followingcode à ErrorStatus.htm :
    <HTML>
    <HEAD>
    <TITLE></TITLE>
    <META NAME="GENERATOR" Content="Microsoft Visual Studio 7.0">
    </HEAD>
    <BODY>
         <b>Custom Error page!</b>
         <br>
         You have been redirected here from the <customErrors> section of the 
         Web.config file.
    </BODY>
    </HTML>
    					
  6. Pour tester le code, enregistrez les fichiers, générez le projet, puis affichez AppEvent.aspx dans le navigateur. Notez que lorsque l'erreur est levée, vous êtes redirigé vers la page ErrorStatus.htm.
Bien que vous pouvez faire référence à une page d'erreur par défaut dans la valeur de l'attribut defaultRedirect dans la section <customErrors>, vous pouvez également spécifier une page particulière de redirection basée sur le code d'erreur HTTP qui est déclenché. Cette option permet de l'élément enfant de <error>. Par exemple :<b00> </b00> </error> </customErrors>
<customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
	<error statusCode="404" redirect="filenotfound.htm" />
</customErrors>
				
Remarque : La page spécifiée dans l' attribut defaultRedirect de la section <customErrors>est un fichier .htm. JE

Notez que la section <customErrors>inclut un attribut de mode est défini sur On. L'attribut mode est utilisé pour contrôler la redirection de l'erreur se produit. Par exemple, si vous développez l'application, vous probablement pour voir les messages d'erreur ASP.NET réels et ne souhaitez pas être redirigé vers la page d'erreur plus conviviale. L'attribut mode comprend les paramètres suivants : </customErrors></customErrors>
  • Sur: exceptions non gérées redirigent l'utilisateur vers la page spécifiée defaultRedirect . Ce mode est utilisé principalement durant la production.
  • Désactivé: les utilisateurs reçoivent des informations sur les exceptions et sont redirectedto pas la page defaultRedirect . Ce mode est utilisé principalement en cours de développement.
  • RemoteOnly: seuls les utilisateurs qui accèdent au site sur l'ordinateur local (usinglocalhost) reçoivent les informations sur les exceptions. Tous les autres utilisateurs sont redirigés vers la page defaultRedirect . Ce mode est utilisé principalement pour le débogage.

Résolution des problèmes

Dans son installation par défaut sur Microsoft Windows 2000 et Microsoft Windows XP, ASP.NET exécute le code de l'application Web dans un processus de travail. L'identité de ce processus est par défaut un compte local sans privilège nommé compte ASPNET. Dans les versions bêta d'ASP.NET, l'identité du processus était System, un compte administratif puissant disposant de nombreux privilèges sur l'ordinateur.

Dans son installation par défaut sur Windows Server 2003 (IIS 6), ASP.NET exécute le code de l'application Web dans un processus de travail. L'identité de ce processus est par défaut un compte limité nommé NetworkService.

Pour plus d'informations sur cette modification et comment il peut affecter l'exécution du code dans cet article et autres codes nécessitant des droits d'accès supplémentaires, visitez les sites Web suivants :
Modifications de sécurité version 1 pour le Microsoft.NET Framework
http://msdn2.Microsoft.com/en-us/library/ms994923.aspx

Références

Pour plus d'informations, visitez les sites Web de Microsoft à l'adresse suivante :
Gestion des exceptions dans .NET

Méthode HttpServerUtility.ClearError

Centre de développement MSDN .NET

Page d'accueil Microsoft .NET

Propriétés

Numéro d'article: 306355 - Dernière mise à jour: mardi 29 octobre 2013 - Version: 4.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft ASP.NET 1.0
  • Microsoft Visual C# .NET 2002 Initiation
  • Microsoft ASP.NET 1.1
  • Microsoft Visual C# .NET 2003 Initiation
Mots-clés : 
kbconfig kbhowtomaster kbweb kbmt KB306355 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu d'une traduction automatique réalisée par un logiciel Microsoft et non par un traducteur professionnel. Cette traduction automatique a pu aussi être révisée par la communauté Microsoft grâce à la technologie Community Translation Framework (CTF). Pour en savoir plus sur cette technologie, veuillez consulter la page http://support.microsoft.com/gp/machine-translation-corrections/fr. Microsoft vous propose en effet des articles traduits par des professionnels, des articles issus de traductions automatiques et des articles issus de traductions automatiques révisées par la communauté Microsoft, de manière à ce que vous ayez accès à tous les articles de notre Base de connaissances dans votre langue. Il est important de noter que les articles issus de la traduction automatique, y compris ceux révisés par la communauté Microsoft, peuvent contenir des erreurs de vocabulaire, de syntaxe ou de grammaire. Microsoft ne pourra être tenu responsable des imprécisions, erreurs, ainsi que de tout dommage résultant d?une traduction incorrecte du contenu ou de son utilisation par les clients.
La version anglaise de cet article est la suivante: 306355
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com