2011-07-13 1 views
8

J'essaie d'ajouter des pages d'erreur personnalisées à mon application Web. Jusqu'à présent, je l'ai ajouté à mon fichier web.config sous l'élément:Empêcher IIS 7.5 d'afficher les pages d'erreur par défaut à l'aide du fichier web.config

<customErrors mode="On" > 
    <error statusCode="404" redirect="~/404.aspx"/> 
    <error statusCode="500" redirect="~/500.aspx"/> 
</customErrors> 

Cela fonctionne bien pour les erreurs .NET touche par exemple une URL contenant l'extension .aspx. Cependant, je souhaite également que les erreurs personnalisées s'affichent pour une URL telle que www.example.com/dasda

Actuellement, lorsque je demande une page telle que ci-dessus, IIS 7.5 affiche son propre message d'erreur. J'ai ajouté ceci sous l'élément:

<httpErrors > 
    <remove statusCode="404" subStatusCode="-1" /> 
    <error statusCode="404" path="~/404.aspx" responseMode="ExecuteURL" /> 
    <remove statusCode="500" subStatusCode="-1" /> 
    <error statusCode="500" path="~/500.aspx" responseMode="ExecuteURL" /> 
</httpErrors> 

Je pensais que ce serait afficher IIS une page d'erreur personnalisée au lieu de c'est par défaut les mais cela ne semble pas être le cas.

Je suis conscient que je peux définir une page d'erreur personnalisée dans IIS lui-même, mais une solution idéale pour ma situation serait de le configurer dans le web.config.

J'ai essayé d'ajouter ceci dans mes pages d'erreur personnalisées sur l'événement Page_Load comme suggéré here:

  Response.TrySkipIisCustomErrors = true; 

Cependant, il n'a pas empêché la page IIS par défaut de montrer à la place de ma page d'erreur personnalisée. J'ai aussi essayé ce qui est suggéré here:

<httpErrors > 
    <remove statusCode="404" subStatusCode='-1' /> 
    <error statusCode="404" path="~/404.aspx" prefixLanguageFilePath='' responseMode="Redirect" /> 
    <remove statusCode="500" subStatusCode='-1' /> 
    <error statusCode="500" path="~/500.aspx" prefixLanguageFilePath='' responseMode="Redirect" /> 
    </httpErrors> 

Mais cela n'a pas non plus travaillé.

Y a-t-il un moyen d'empêcher IIS d'afficher les pages d'erreur par défaut en configurant les paramètres dans le fichier web.config?

Répondre

14

Le problème que je rencontrais était que, par défaut a un ErrorMode d'attribut avec les éléments suivants options: DetailedLocalOnly, Personnalisé ou Détaillé.

Si l'attribut errorMode est laissé non spécifié comme je le faisais alors il est par défaut DetailedLocalOnly (ref). Ce qui signifie que je n'aurais pas vu l'erreur personnalisée qui était affichée.

Les paramètres de configuration qui travaillaient étaient:

<httpErrors errorMode="Custom"> 
    <remove statusCode="404" subStatusCode='-1' /> 
    <remove statusCode="500" subStatusCode='-1' /> 
    <error statusCode="404" path="/404.aspx" prefixLanguageFilePath="" responseMode="ExecuteURL" /> 
    <error statusCode="500" path="/500.aspx" prefixLanguageFilePath="" responseMode="ExecuteURL" /> 
    </httpErrors> 

Le ErrorMode = « Custom » est à portée de main pour tester les pages personnalisées fonctionnent correctement, mais est probablement plus pratique lorsque gauche omis ou explicitement ErrorMode = "DetailedLocalOnly "à des fins de débogage.

+1

Merci Aesir de l'avoir posté. J'ai été capable de résoudre un même problème avec votre exemple. – GibboK

+2

Cela a également résolu mon problème. Merci! –

+1

Merci d'avoir découvert le drapeau errorMode; le manque d'effet m'ennuyait énormément. – icelava

0

Je pense que vous devez forcer IIS à utiliser CustomErrorModule pour toute ressource demandée par l'utilisateur. Essayez d'ajouter le ci-dessous pour votre config web

<modules> 
     <add name="CustomErrorModule" type="customErrorModule" preCondition="" /> 
</modules> 

ont aussi un oeil sur le lien ci-dessous

https://serverfault.com/questions/53712/in-iis-7-how-do-i-set-up-a-default-error-document-for-any-error

+1

Merci, quelle partie du web.config devrait-elle être ajoutée? J'ai essayé de le mettre dans la section httpModules et la section des modules, mais aucune n'a fonctionné. – Aesir

+0

Merci la mise à jour mais cela ne fonctionnait toujours pas. J'ai réussi à le faire fonctionner. – Aesir

Questions connexes