web-dev-qa-db-fra.com

Gestion des erreurs dans ASP.NET MVC 3

Y a-t-il un moyen intégré ou approprié de gérer les erreurs dans ASP.NET MVC 3?

C'est ce que je veux faire:

  1. Si l'application se bloque ou jette une erreur, elle passe à une page d'erreur spécifique.
  2. Je peux jeter ma propre erreur de l'action du contrôleur. (et cela va à une page d'erreur).

J'ai trouvé les manières suivantes:

  1. Je vois qu'il y a un long chemin à faire ici . (pour v1 et v2 mais s'applique également à V3).
  2. Utilisation d'un attribut Errorhandle ici .

Comment gérer cela la manière appropriée?

Si la solution est similaire ou est comme n ° 1 dans la liste ci-dessus, j'utilise Ninject et je n'ai pas créé de classe de base. Comment faire ça?

34
Shawn Mclean

Pour la manipulation des erreurs mondiales
[.____] Tout ce que vous avez à faire est de changer le mode CustomErrors = "On" dans web.config Page
L'erreur sera affichée via ERROR.CSHTML réside dans le dossier partagé.

Assurez-vous que la mise en page ERROR.CSHTML n'est pas NULL.
[.____] [ce devrait être quelque chose comme: @ {mise en page = "~/vues/partagé/_layout.cshtml"; }
[.____] ou supprimer la mise en page = bloc de code null]
[.____] un balisage d'échantillon pour erreur.cshtml: -

@{ Layout = "~/Views/Shared/_Layout.cshtml"; } 

@model System.Web.Mvc.HandleErrorInfo

<!DOCTYPE html>
<html>
<head>
    <title>Error</title>
</head>
<body>
    <h2>
        Sorry, an error occurred while processing your request.
    </h2>
    <p>Controller Name: @Model.ControllerName</p>
    <p>Action Name : @Model.ActionName</p>
    <p>Message: @Model.Exception.Message</p>
</body>
</html>

Pour une manipulation d'erreur spécifique
[.____] Ajouter un attribut guérisseur à une action spécifique dans la classe de contrôleur. Fournissez "vue" et "exceptype" pour cette erreur spécifique.
[.____] Un échantillon de gestionnaire d'exception notamplité:

public class MyController: Controller
    {
        [HandleError(View = "NotImplErrorView", ExceptionType=typeof(NotImplementedException))]
        public ActionResult Index()
        {
            throw new NotImplementedException("This method is not implemented.");
            return View();
        }
}
14
Sunil

La façon la plus simple que je pense que vous puissiez faire cela consiste à utiliser la bibliothèque Elmah.

Jetez un coup d'œil à ceci: http://code.google.com/p/elmah/wiki/mvc et ceci http://www.haselman.com/blog/elmaherrorloggingmodulesandhandlersforaspnetandmvcto. ASPX

4
thitemple

Je pense que le moyen le plus simple consiste à utiliser Excepthandler Attribut car il est prêt à utiliser à tout moment, vous créez un nouveau projet ASP.NET MVC 3. Vous pouvez toujours configurer Web.config pour utiliser une page d'erreur personnalisée et des exceptions de traitement de la méthode globale Application_Error comme d'habitude, mais lorsqu'une exception se produit, l'URL n'est pas affichée aussi bien que la nouvelle voie du MVC 3.

2
Tien Do