2 votes

Guide définitif de la gestion des erreurs 500 dans IIS6, IIS7, ASP.NET MVC3 avec page personnalisée

J'essaie d'ajouter une page de gestion des erreurs 500 à mon projet ASP.NET MVC3.

Je veux que ma page d'erreur personnalisée s'affiche indépendamment de l'accès local ou distant. Mon site Web fonctionne sur IIS6, IIS7 et IIS7.5 Express.

Je veux qu'il soit affiché quand :

  • Une exception est levée dans Application_BeginRequest.
  • Une exception est levée dans Application_Error.
  • Une exception est levée dans un constructeur statique du projet de site Web.
  • Une exception est déclenchée dans un contrôleur
  • Une exception est levée dans une vue
  • Une exception lancée n'importe où, à peu près.

Je n'y suis pas parvenu. En fait, je n'ai pas réussi à faire en sorte que les pages d'erreur personnalisées s'affichent.

Ma page d'erreur se trouve dans ~/Views/Shared/Error.aspx

Ma méthode Application_Error dans Global.asax.cs se contente de consigner l'exception levée.

Mon web.config a ceci :

<customErrors mode="On" defaultRedirect="~/Views/Shared/Error.aspx" redirectMode="ResponseRewrite">
</customErrors>
...
<system.webServer>
  <httpErrors errorMode="Custom" />
  ...
</system.webServer>

Qu'est-ce que je rate ? Que dois-je faire pour gérer ces scénarios ?

1voto

Jon Adams Points 8637

Pour IIS 7+, il vous manque seulement la partie qui définit dont httpErrors à traiter avec des gestionnaires personnalisés :

<configuration>
   <system.webServer>
      <httpErrors errorMode="Custom">
         <remove statusCode="500" />
         <error statusCode="500" path="~/Views/Shared/Error.aspx" />
       </httpErrors>
   </system.webServer>
</configuration>

(Le <remove /> est facultative, en fonction de votre hiérarchie web.config).

Pour IIS 6 et les versions inférieures, vous devez définir ce paramètre via le gestionnaire IIS en accédant à la page Propriétés appropriée, onglet Erreurs personnalisées, puis modifier la ligne HTTPError appropriée en "Message type :" "URL" et "URL :" "~/Views/Shared/Error.aspx".

0voto

Peter Bromberg Points 1066

La meilleure approche consiste à trouver pourquoi votre BeginRequest lève une exception en premier lieu. Cela ne devrait pas se produire. Dans Application_Error, une alternative consiste à utiliser GetBaseException et à rediriger vers votre page d'erreur personnalisée avec les informations relatives à l'exception.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X