2009-07-14 8 views
1

J'utilise l'événement Application_Error pour détecter et enregistrer les erreurs dans mon application. L'erreur est enregistré, puis un écran d'erreur convivial est affiché:L'erreur de l'application ASP.NET a remplacé 404?

Dans mon web.config j'ai:

<customErrors mode="On" defaultRedirect="GlobalError.aspx"> 
    <error statusCode="404" redirect="PageNotFound.aspx" /> 
</customErrors> 

Chaque fois qu'un utilisateur essaie de charger une page qui n'existe pas, ils obtenez la page GlobalError.aspx, pas la page PageNotFound.aspx. J'ai regardé dans l'événement Application_Error et ai trouvé que le StatusCode de réponse était 200, tandis que la dernière erreur du serveur était "Page 'foo.aspx' n'a pas été trouvé."

Que dois-je faire pour que cela fonctionne correctement?

Répondre

3

Dans la fonction Application_Error, vous devez uniquement Server.Transfer si l'erreur n'est pas une page introuvable/404. Dans ce cas, laissez ASP.NET effectuer la redirection en utilisant les paramètres du fichier web.config.

Vous pouvez savoir si c'est un 404 en utilisant les éléments suivants:

Exception ex = Server.GetLastError(); 
if (ex.GetType() == typeof(HttpException)) 
{ 
    HttpException httpEx = (HttpException)ex; 
    if(httpEx.GetHttpCode() == 404) { 
    return; 
    } 
} 
Server.Transfer("~/error.aspx"); 
+0

J'ai pensé à cela, mais comme je l'ai dit, même lorsque la page n'est pas trouvée, le StatusCode est 200, pas 404. –

+0

J'ai ajouté un extrait de code pour détecter si c'est une erreur 404 –

+0

Cela fonctionne comme on le ferait attendre, mais il semble maladroit, non? Pourquoi dois-je le détecter? Pourquoi web.config ne fonctionne-t-il pas comme je le souhaite? –

0

Pour commencer, vous devrez décider pourquoi ils obtiennent GlobalError.aspx. Vous nous avez montré deux possibilités; peut-être qu'il y en a plus.

Modifiez le nom d'une de ces entrées en GlobalErrorX.aspx et voyez ce qui se passe.

+0

Lorsque je retire le defaulRedirect, il pousse l'utilisateur au même endroit. Évidemment, les deux références au fichier sont redondantes. –

+0

Je viens de réaliser que le 404 pourrait signifier qu'il ne peut pas trouver la page d'erreur. Vérifiez le journal IIS. –

+0

Non, la page 404 apparaît lorsqu'elle est chargée directement et le journal indique que foo.aspx est introuvable. Le problème est en fait avec certains utilisateurs "intelligents". J'utilise une page appelée bar.aspx. Au site client "bar" est appelé "foo". Quand ils chargent bar.aspx ils voient un grand titre qui dit "Foo" - c'est juste une différence entre les différents clients que nous traitons de la même manière qu'un dictionnaire de langue. Le problème est qu'ils essaient de charger foo.aspx directement, et obtiennent un écran d'erreur qui leur fait penser que foo.aspx est cassé, alors qu'en fait l'erreur signifie juste que foo.aspx n'existe pas comme ils pensent le faire . –

Questions connexes