Cette question est en quelque sorte liée à Handle URI hacking gracefully in ASP.NET en ce qu'il concerne également la meilleure façon de gérer les exceptions qui se produisent pendant un cycle de vie de demande ASP.NET. J'ai trouvé un moyen de gérer la plupart des exceptions gracieusement, mais j'ai constaté que certaines exceptions se produisent si tard dans la demande qu'il est impossible de faire des choses comme Server.Transfer
pour compresser toute la logique de présentation d'erreurs dans sa propre page.Comment gérer les exceptions pendant un cycle de vie de demande ASP.NET
Donc, je dois gérer l'exception à l'intérieur de l'événement Application_Error
à la place, et faire Response.Write
s et autres joyeusetés. C'est moche. Je comprends que dans certaines circonstances, le flux de réponse aurait déjà pu être vidé, donc le transfert de la demande n'est pas vraiment une option. Ce que je veux demander, c'est s'il y a quelqu'un qui a trouvé une solution élégante à ce problème?
En outre, je trouve difficile de savoir quand je peux gérer l'exception gracieusement en transférant la demande à une autre page et non. Quel est le meilleur moyen de savoir où se trouve le cycle de vie de la requête lorsqu'une exception se produit? Si cela se produit pendant le chargement et le rendu d'une page, Page_Error
sera en mesure de le gérer et je n'ai pas eu de problème à faire Server.Transfer
là encore. Mais si l'exception se produit soit trop tôt soit trop tard pour que le Page_Error
l'attrape et que la bulle se mette à Application_Error
, que dois-je faire pour savoir s'il est tôt ou tard?
S'il est tard dans le cycle de vie, je vais probablement faire Response.Write
directement à partir Application_Error
, mais si elle est trop tôt je peux faire Server.Transfer
. Le problème est qu'essayer de faire Server.Transfer
lui-même provoquera une exception si c'est aussi dans la demande de le faire. Donc, y a-t-il une énumération globale ou quelque chose de similaire qui indiquera s'il est trop tard pour faire des choses créatives avec la réponse ou non?
Salut, et merci pour la suggestion. Une application de console externe ne sera pas vraiment utile car ce que je veux, c'est non seulement attraper l'erreur (que je fais déjà très bien), mais aussi afficher un message d'erreur amical. –
Utilisez-vous les pages d'erreur personnalisées? Cela vous permet d'afficher des informations personnalisées basées sur le code d'état Http qui sont lancées en fonction du résultat de toute demande? –
ASP.NET redirige toutes les demandes vers les pages d'erreur (au lieu de Server.Transfer, par exemple), ce qui est inutilisable. –