Comment utiliser Application_Error dans ASP.NET MVC?
Je veux utiliser Application_Error avec mon projet MVC, mais je ne peux pas le faire fonctionner. - Je ajouter ce qui suit à mon Global.asax fichier:
protected void Application_Error(object sender, EventArgs e)
{
Exception objErr = Server.GetLastError().GetBaseException();
Session["Test"] = "Message:" + objErr.Message.ToString();
}
(La Session est uniquement pour les tests. Je vais utiliser une base de données de journal d'erreur, si je reçois ce travail.)
Ensuite, j'essaie de lever une exception de mon contrôleur HomeController et ma Maison/Indice point de Vue, mais il ne déclenche Debug.
public ActionResult Index()
{
ViewData["Message"] = "Welcome to ASP.NET MVC!";
throw (new Exception());
return View();
}
Dans mon Webconfig fichier que j'ai mis un defaulterror page, mais il n'est pas redirigé vers la vue:
<customErrors defaultRedirect="Home/Error">
<error statusCode="403" redirect="NoAccess.htm" />
<error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>
source d'informationauteur Poku | 2009-09-23
Vous devez vous connecter pour publier un commentaire.
Donc tout d'abord rappeler que la gestion des erreurs global devrait être un dernier recours, et les classes de contrôleur spécifique méthode d'erreur pour les erreurs;
À l'intérieur de cela, vous pouvez le rediriger vers le standard d'erreur;
Le problème que vous avez dans l'application globale de l'erreur, c'est qu'il n'a pas de notion de points de vue ou des contrôleurs, donc si vous voulez rediriger là, puis vous devez utiliser une URL connue
mais vous n'avez pas besoin de le faire. Si vous définissez la page d'erreur par défaut dans le web.config alors vous n'avez pas besoin de rediriger
Toutefois, sauf si vous avez ajouté une erreur de la vue de votre Maison contrôleur qui n'existe pas, il faut donc ajouter les lignes suivantes à la maison contrôleur
Ensuite (si vous êtes sensible) vous auriez mis le code de gestion d'erreur dans l'Erreur() la méthode, car c'est là que toutes les erreurs non gérées.
Et enfin n'oubliez pas que, par défaut, vous ne voyez pas d'erreurs personnalisées si vous vous connectez à localhost! Si vous avez besoin de changer le comportement
IHttpHandler
pas marqué avecIRequiresSessionState
ensuite l'accès àSession
échouera.Session["Test"]
? Êtes-vous sûr que votre code ne fonctionne pas actuellement? Vous pouvez essayer un Fichier.Ouvrir et simplement la sortie du texte (par exemple à l'heure actuelle) àC:\my-log.txt
ce qui est légèrement plus susceptibles de réussir que d'utiliserSession
.GetBaseException
n'est pas utile dans ce cas (ni en général pour l'enregistrement) dans la mesure où je peux dire.Message
est de typestring
- appel.ToString()
n'est pas nécessaire. En général, je recommanderais fortement éviterToString()
lorsque cela est possible - si vous l'utilisez, car vous n'êtes pas sûr du type de l'objet, qui devrait être un drapeau rouge; faire pour contourner le type de système peut cacher des bogues (par exemple,DBNull.Value.ToString() == ""
). Pour l'interface graphique de la builtin types de fournir un.ToString(IFormatProvider)
surcharge qui est sensible à la culture et à éviter des problèmes de portabilité. Depuis que la surcharge est pas présent surobject
c'est aussi une garantie pour éviter la très faiblement typé.ToString
appels.