2010-09-30 8 views
2

Voici la situation: -ASP.Net. Pourquoi suis-je ne vois pas ma page defaultRedirect même si le mode customErrors = "On"

Je

 
    <customErrors mode="On" defaultRedirect="error.html" /> 

dans mon web.config.

J'ai également un code de gestion des erreurs personnalisé dans Application_Error (dans global.asax.cs) qui vérifie certains types d'exception bien connus et les redirige vers des pages d'erreurs personnalisées pour chacun. Si l'exception n'est pas un type bien connu, je reviens simplement de Application_Errorsans en appelant Server.ClearError() donc la gestion personnalisée par défaut devrait prendre soin d'afficher la page error.html.

Mais chaque fois que mon application vomit un unhandled (et pas bien connu), je finis par exception à la page d'erreur par défaut Asp.Net - vous savez celui que je veux dire, l'écran jaune de la mort ...

 
Runtime Error 
Description: An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed. 

Details: To enable the details of this specific error message to be viewable on the local server machine, please create a tag within a "web.config" configuration file located in the root directory of the current web application. This tag should then have its "mode" attribute set to "RemoteOnly". To enable the details to be viewable on remote machines, please set "mode" to "Off". 

J'ai vérifié les choses évidentes (par exemple en vérifiant que je ne lance pas une autre erreur en Application_Error et que je n'appelle pas accidentellement ClearError.) C'est définitivement quelque chose de louche avec cette application web (j'ai fait une petite application web de test la gestion des erreurs personnalisées a fonctionné comme prévu) - cela devrait exclure les bizarreries dans mon fichier machine.config

Je vais continuer à me gratter la tête et essayer des choses mais en attendant, j'ai pensé que je mettrais la question ici pour voir si quelqu'un avait des idées brillantes.

PS. Je travaille sur Windows 7 Professionnel (IIS 7.5) mais le même comportement est observé sur Win Server 2003 (IIS6).

+0

Pouvons-nous voir votre code global.asax.cs ... –

+0

Est-ce que .Net peut trouver la page d'erreur à partir de l'emplacement où l'erreur est déclenchée? Typiquement, utilisez defaultRedirect = "~/error.html" – Clicktricity

Répondre

1

Merci Joe et cliquez pour jeter un coup d'oeil mais ce problème est tout de ma faute! Une information cruciale que j'ai omise de la description est que ma page Web vide la réponse avant que la demande soit finie (voir * ci-dessous si vous voulez savoir pourquoi je fais cette méchanceté).

Il semble qu'une fois que du contenu a été envoyé au client, la gestion customError ne fonctionne plus. Je ne peux pas dire qu'il s'agit d'un échec de la gestion des erreurs personnalisées, car il faudrait probablement du sombre vaudou pour dire à un navigateur de rediriger une fois qu'il a commencé à rendre le contenu! Cela dit, j'avais espoir que l'ajout de redirectMode="ResponseRewrite" au noeud customError aiderait (peut-être obtenir la page d'erreur ci-dessous le contenu que j'ai déjà envoyé au navigateur?) Mais cela échoue aussi. Ça ne fait rien.

Un rapide google cède ce http://forums.iis.net/p/993221/1313916.aspx - et un gars là-bas a un travail que je vais essayer. La technique proposée dans http://forums.iis.net/p/993221/1399583.aspx#1399583 fonctionne. C'est loin d'être idéal (il faut lire la configuration web) mais ça marche. (*) Pourquoi est-ce que je vidange la réponse avant que la requête ne soit terminée? Certaines de nos pages renvoient des rapports volumineux qui peuvent prendre plusieurs secondes à générer. Nous envoyons un message "PLease wait + spinny gif" aux clients au début de ces requêtes et vidons le message afin que le navigateur affiche le message + l'icône pendant qu'il attend le reste de la réponse. Je pense que je vais étudier une façon moins "hacky" d'y parvenir.

Questions connexes