Vous utilisez une page d'erreur globale (dumb) pour toutes les erreurs ASP.NET MVC?
-
10-07-2019 - |
Question
J'ai configuré et configuré ELMAH pour consigner toutes mes erreurs dans un projet ASP.NET MVC sur lequel je travaille. Il sera utilisé par un petit groupe d’utilisateurs qui n’ont pas besoin d’en savoir plus, donc chaque fois qu’il ya une sorte d’erreur (404, InvalidOperation, Y2K ... n'importe quoi!), Je veux juste montrez-leur une vue d'erreur générique par défaut avec les instructions pour appeler notre service d'assistance et rester assis à la verticale.
ELMAH est opérationnel et notre équipe de support technique utilisera pour diagnostiquer les erreurs et consigner / élever les tickets si nécessaire. Mon problème est d’obtenir ma page d’erreur globale. J'utilise la solution publiée ici pour vous assurer que ELMAH et [HandleError] jouent bien ensemble.
Web.config est configuré comme suit:
<customErrors mode="On" />
Si j'accède à http: // application / Home / Index qui présente une erreur LINQ (la séquence ne contient pas éléments), ma belle vue d'erreur générique s'affiche dans /Shared/Error.aspx, mais si j'essaie d'accéder à http: / / application / Fake / Broken qui est un 404, puis je reçois l’ASP.NET habituel
Server Error in '/' Application.
The resource cannot be found.
Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.
Requested URL: /Fake/Broken
Cependant, les deux erreurs sont parfaitement consignées par ELMAH.
La solution
Si vous souhaitez uniquement afficher une page d'erreur générique, vous pouvez spécifier la page elle-même:
<customErrors mode="On" defaultRedirect="error.htm" />
Cela ferait afficher votre "error.htm" par toutes les exceptions non gérées, les pages non trouvées, etc. Vous pouvez cependant être plus précis sur les codes d'erreur:
<customErrors mode="On">
<error statusCode="404" redirect="notfound.htm"/>
</customErrors>
Autres conseils
si vous utilisez IIS 7, vous devrez peut-être ajouter ceci à votre
<system.webServer>
Section du fichier de configuration
<httpErrors errorMode="Custom" existingResponse="PassThrough" />