2008-09-24 11 views
3

Venant d'un arrière-plan de bureau, je ne sais pas exactement comment passer les exceptions que j'ai attrapées à une page d'erreur afin d'éviter que l'écran d'exception standard soit vu par mon utilisateurs.Passer des exceptions à un écran d'erreur dans ASP.net/C#

Ma question générale est comment puis-je passer l'exception de la page X à ma page d'erreur dans ASP.net?

Répondre

6

Je suggère d'utiliser la section customErrors dans le web.config:

<customErrors mode="RemoteOnly" defaultRedirect="/error.html"> 
     <error statusCode="403" redirect="/accessdenied.html" /> 
     <error statusCode="404" redirect="/pagenotfound.html" /> 
    </customErrors> 

Et puis en utilisant ELMAH au courrier électronique et/ou enregistrer l'erreur.

0

Je pense que vous pouvez utiliser le global.asax - gestionnaire Application_Exception pour attraper l'exception et le stocker pour afficher dans une page d'erreur. En réalité, votre page d'erreur ne devrait pas contenir de code qui pourrait causer juste une autre erreur. Il devrait être simple "Oups, quelque chose s'est mal passé" page.

Si vous voulez des détails sur l'erreur, utilisez la visionneuse d'événements de Windows ou ELMAH ou utilisez un mécanisme de journalisation.

+0

Je déteste «Oups! Quelque chose s'est mal passé» avec une passion. Il devrait y avoir un traitement d'erreur trivial autour d'une page de rapport d'erreurs qui pourrait éventuellement aboutir à une page "Oups", mais si vous atteignez cette page Oups, rien ne devrait fonctionner du tout. Je voudrais donner aux codeurs de telligent et à quiconque d'autre est coupable de ceci un wedgie et un swirly, en même temps. –

+0

@ stimpy77 Cela dépend ... Parfois, c'est ce que les journaux d'événements et ELMAH sont pour ... et la page d'erreur est juste quelque chose pour calmer les utilisateurs. – chakrit

1

Utilisez les pages d'erreur personnalisées dans asp.net, vous pouvez le trouver dans la section customError dans le web.config

2

Le modèle que je l'utilise est d'enregistrer l'erreur dans un bloc try/catch (en utilisant log4net) , puis faites un response.redirect à une page d'erreur simple. Cela suppose que vous n'avez pas besoin d'afficher les détails de l'erreur.

Si vous avez besoin des détails d'exception sur une page séparée, vous pouvez consulter Server.GetLastError. Je l'utilise dans global.asax (dans l'événement Application_Error) pour consigner les exceptions non gérées et rediriger vers une page d'erreur.

2

Nous avons eu la chance de capturer des exceptions dans l'événement Global.asax Application_Error, de les stocker en session et de les rediriger vers notre page d'erreur. Alternativement, vous pouvez encoder le message d'erreur et le transmettre à la page d'erreur dans la chaîne de requête.

2

Vous pouvez également obtenir l'exception de

Server.GetLastError(); 
1

Nous saisissons l'exception dans le fichier Global.asax, stocker en session, l'utilisateur est alors redirigé vers la page d'erreur où nous saisissons l'exception pour notre Variable de session et affiche les informations de message à l'utilisateur.

protected void Application_Error(object sender, EventArgs e) 
    { 
     Exception ex = Server.GetLastError(); 
     this.Session[CacheProvider.ToCacheKey(CacheKeys.LastError)] = ex; 
    } 

Nous enregistrons le message d'erreur avant de l'afficher à l'utilisateur.

+0

J'ai essayé ceci, mais cela ne fonctionne pas quand j'utilise Session ["Error"] sur global.asax et la page aspx. –