Utilisation de HandleErrorAtsortingbute dans une application ASP.NET MVC

J’ai une question sur la meilleure façon d’utiliser HandleErrorAtsortingbute dans mon application MVC 5. Comme nous le soaps, nous pouvons append cet atsortingbut à des filtres globaux comme celui-ci:

filters.Add(new HandleErrorAtsortingbute{View = "Error"}); 

Cela implique que l’application affiche la vue “Erreur” à chaque fois qu’une exception non gérée est renvoyée à un niveau d’application quelconque. Mais, si j’ai une certaine logique dans un autre filtre d’autorisation ou d’action global, qui produit une exception, que lorsque l’exception est affichée pour la première fois, puis que l’application essaie de redirect vers la vue d’erreur, un autre filtre commence à s’exécuter et produit à nouveau la même exception. .net pour éviter cette boucle terminer l’application. Alors, quel est le meilleur moyen d’utiliser ce HandleErrorAtsortingbute pour éviter un tel comportement? Merci!

Edit: Après un debug, j’ai trouvé que ce n’était pas le comportement habituel de HandleErrorAtsortingbute, donc cette boucle ne m’appartient que lorsque j’utilise des tra

 {key}/{controller}/{action} 

et lorsqu’une erreur survient dans la logique de filtrage, l’application tente de redirect vers la vue d’erreur, mais une autre logique de filtrage commence à s’exécuter et je vois même une valeur “Erreur” dans le paramètre de route {clé}; il s’agit donc d’un comportement indésirable. Lorsque j’utilise la route par défaut {controller}/{action} cela ne se produit pas et je reçois exactement la vue d’erreur sans exécuter de logique de filtrage globale une seconde fois.

Vous devez envelopper votre logique de filtre d’action dans un catch try , puis à l’intérieur du bloc catch , redirect vers la vue Error et transmettre l’ Exception .

Votre seule autre solution consiste à HandleError complètement HandleError et à utiliser l’événement Application_Error dans Global.asax pour gérer le traitement des erreurs. De cette façon, vous pouvez redirect votre action Error intérieur de celle-ci, quel que soit l’endroit où l’erreur s’est produite.

Matt a raison à propos de global.asax … c’est l’exemple que j’ai suivi http://www.digitallycreated.net/Blog/57/getting-the-correct-http-status-codes-out-of-asp.net- pages d’erreur personnalisées

Ensuite, dans chaque vue, j’ai ajouté: Response.StatusCode = 500; ou quel que soit le code que je voulais montrer au client.