7
votes

Dans ASP.NET Comment identifier / traiter 404 exceptions?

J'ai besoin de gérer 404 exceptions différemment de tous les autres types d'entre eux. Quel est le meilleur moyen d'identifier ces 404 exceptions (distinguer des autres exceptions)?

Le problème est qu'il n'y a pas de classe d'exception spéciale pour 404 erreurs, je reçois régulièrement System.web.httpException avec Message = "Le fichier n'existe pas."

Devrais-je simplement utiliser le message d'exception pour cela ou y a-t-il une meilleure façon?

merci.


2 commentaires

Manipuler où? Dans Global.Asax Handler d'erreur d'application? Dans le code qui appelle à une autre application ASP.NET (c'est-à-dire un client Web)?


Gérer dans global.aSax sur le côté serveur.


4 Réponses :


3
votes

Je vous suggère de configurer votre application pour rediriger les erreurs 404 sur une page spécifique, telle que ~ / quadrohfour.aspx code>. Dans cette page, vous pouvez inspecter le paramètre aspxErrorPath code> QueryString, qui signalera la page que l'utilisateur tentait de visiter. À partir de là, vous pouvez faire toutes sortes de choses intéressantes, de la journalisation du 404, de vous envoyer un message pour tenter de déterminer l'URL correcte et de rediriger automatiquement l'utilisateur à cela.

Pour configurer votre application Web pour rediriger l'utilisateur. à une page personnalisée de la face d'un 404, ajoutez le balisage suivant à web.config code> dans le code> Section: P>

<customErrors mode="On" defaultRedirect="~/GeneralError.aspx">
    <error statusCode="404" redirect="~/FourOhFour.aspx" />
</customErrors>


1 commentaires

Merci. Je fais tout cela déjà, mais ce n'est pas un problème. Mon problème est que l'exception est toujours lancée dans Global.Axax Même si Redirection a travaillé et j'ai besoin de le gérer là-bas. Comment puis-je dire que l'exception est HTTP 404 et non l'autre?



1
votes

Dans le fichier web.config, vous pouvez spécifier un fichier distinct pour chaque code d'erreur. xxx


1 commentaires

Je fais déjà cela, mais l'exception que j'ai décrite est toujours jetée et j'ai toujours besoin de le gérer correctement dans Global.Axax.



2
votes

Vous pouvez attraper l'exception. Vous essayez d'attraper cela dans une application client, correct?

HttpWebRequest req = ( HttpWebRequest )WebRequest.Create( someURL );
try
{
    HttpWebResponse resp = req.GetResponse();
}
catch( WebException webEx )
{
   if( webEx.Response != null )
   {
      HttpWebResponse response = webEx.Response as HttpWebResponse;
      switch( response.StatusCode )
      {
         case HttpStatusCode.NotFound:
             // do something
             break;


1 commentaires

Nope, c'est un côté pur serveur: global.asax. Je n'ai aucun problème à attraper l'exception, mon problème est de l'identifier comme http 404.



19
votes

Vous pouvez essayer de jeter l'exception en tant que httpexception , puis utilisez la méthode gethttpcode pour vérifier s'il s'agit d'un 404 ou non.

Par exemple: xxx


1 commentaires

Excellent! Merci! Ça y est ...!