Comment utiliser le [HandleError]
filtre dans asp.net MVC Preview 5?
J'ai défini les customErrors dans mon fichier Web.config
<customErrors mode="On" defaultRedirect="Error.aspx">
<error statusCode="403" redirect="NoAccess.htm"/>
<error statusCode="404" redirect="FileNotFound.htm"/>
</customErrors>
et mettez [HandleError] au-dessus de ma classe de contrôleur comme ceci:
[HandleError]
public class DSWebsiteController: Controller
{
[snip]
public ActionResult CrashTest()
{
throw new Exception("Oh Noes!");
}
}
Ensuite, je laisse mes contrôleurs hériter de cette classe et j'appelle CrashTest () sur eux. Visual Studio s'arrête à l'erreur et après avoir appuyé sur f5 pour continuer, je suis redirigé vers Error.aspx? Aspxerrorpath = / sxi.mvc / CrashTest (où sxi est le nom du contrôleur utilisé. Bien sûr, le chemin ne peut pas être trouvé et je reçois "Erreur de serveur dans l'application '/'." 404.
Ce site a été porté de l'aperçu 3 à 5. Tout fonctionne (ce n'était pas beaucoup de travail à porter) sauf la gestion des erreurs. Lorsque je crée un nouveau projet complet, la gestion des erreurs semble fonctionner.
Des idées?
--Remarque--
Puisque cette question a maintenant plus de 3K vues, j'ai pensé qu'il serait avantageux de mettre ce que j'utilise actuellement (ASP.NET MVC 1.0). Dans le projet mvc contrib, il y a un attribut génial appelé "RescueAttribute". Vous devriez probablement le vérifier aussi;)
la source
RescueAttribute
source: mvccontrib.codeplex.com/SourceControl/changeset/view/…Réponses:
Lorsque vous ne fournissez que l'attribut HandleError à votre classe (ou à votre méthode d'action d'ailleurs), alors lorsqu'une exception non gérée se produit, MVC recherche d'abord une vue correspondante nommée "Erreur" dans le dossier Vue du contrôleur. S'il ne peut pas le trouver là-bas, il procédera à la recherche dans le dossier Shared View (qui devrait contenir un fichier Error.aspx par défaut)
Vous pouvez également empiler des attributs supplémentaires avec des informations spécifiques sur le type d'exception que vous recherchez. À ce stade, vous pouvez diriger l'erreur vers une vue spécifique autre que la vue "Erreur" par défaut.
Pour plus d'informations, consultez l'article de blog de Scott Guthrie à ce sujet.
la source
global.asax
comme celui-ci pour afficher un message aux utilisateurs?Il convient également de noter que les erreurs qui ne définissent pas le code d'erreur http sur 500
(par exemple, UnauthorizedAccessException)
ne sera pas géré par le filtre HandleError.
la source
Solution pour le code d'erreur http à 500, il s'agit d'un attribut appelé [ERROR] le mettre sur une action
//EXEMPLE:
la source
Les attributs dans MVC sont très utiles dans la gestion des erreurs dans les méthodes get et post , ils suivent également les appels ajax .
Créez un contrôleur de base dans votre application et héritez-en dans votre contrôleur principal (EmployeeController).
Public class EmployeeController: BaseController
Ajoutez le code ci-dessous dans le contrôleur de base.
=================================================
Recherche le répertoire: Root / App_Start / FilterConfig.cs
Ajoutez le code ci-dessous:
Suivre l'erreur AJAX:
Appelez la fonction CheckAJAXError lors du chargement de la page de mise en page.
la source
OnException
pour gérer les exceptions" , mais en montrant une mise en œuvre plutôt mauvaise.Il vous manque Error.aspx :) Dans l'aperçu 5, il se trouve dans votre dossier Views / Shared. Copiez-le simplement à partir d'un nouveau projet Preview 5.
la source
}
la source