Quelle est la différence entre les sections customErrors
et httpErrors
du fichier web.config dans les applications ASP.NET MVC?
Quelles sont les directives d'utilisation de chaque section?
Quelle est la différence entre les sections customErrors
et httpErrors
du fichier web.config dans les applications ASP.NET MVC?
Quelles sont les directives d'utilisation de chaque section?
Réponses:
Avertissement: Ceci est de mon expérience et non prouvé.
Les deux sont utilisés pour définir la gestion des erreurs pour un site Web, mais différents logiciels font référence à différents éléments de configuration.
customErrors
sont un élément hérité (rétrocompatible), utilisé par Visual Studio Development Server (alias. VSDS ou Cassini).
httpErrors
sont le nouvel élément qui n'est utilisé que par IIS7.
Cela met en évidence le problème possible lors du développement de sites Web ASP.NET lors de l'utilisation de VSDS au lieu de l'IIS local.
Référez - vous également à cet article pour savoir comment gérer les messages d'erreur avec IIS7, si vous souhaitez avoir un contrôle total sur la sortie d'erreur.
VSDS
- utilisercustomErrors
IIS6
- utilisercustomErrors
IIS7
utiliser httpErrors
.et si vous développez avec VSDS
mais publiez sur IIS7
, alors je suppose que vous aurez besoin des deux.
* Mis à jour en avril 2016
L'attribut customErrors est utilisé lorsque le code .net lève une exception (404, 403, 500, etc.) et l'attribut httpErrors est utilisé lorsque IIS lui-même lève une exception.
Il y a de nombreux pièges à essayer de configurer cela correctement. Donc, si vous cherchez un exemple rapide, les 2 meilleures options que vous avez sont:
Exemple 1: Utilisation de pages html
<system.web>
<customErrors mode="RemoteOnly" defaultRedirect="/Error500.html" redirectMode="ResponseRewrite">
<error statusCode="403" redirect="/Error403.html" />
<error statusCode="404" redirect="/Error404.html" />
<error statusCode="500" redirect="/Error500.html" />
</customErrors>
</system.web>
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly" existingResponse="Auto">
<remove statusCode="403" />
<remove statusCode="404" />
<remove statusCode="500" />
<error statusCode="403" responseMode="File" path="Error403.html" />
<error statusCode="404" responseMode="File" path="Error404.html" />
<error statusCode="500" responseMode="File" path="Error500.html" />
</httpErrors>
</system.webServer>
Exemple 2: utilisation de pages aspx
<system.web>
<customErrors mode="RemoteOnly" defaultRedirect="/Error500.html" redirectMode="ResponseRewrite">
<error statusCode="403" redirect="/Error403.aspx" />
<error statusCode="404" redirect="/Error404.aspx" />
<error statusCode="500" redirect="/Error500.aspx" />
</customErrors>
</system.web>
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly" existingResponse="Auto">
<remove statusCode="403" />
<remove statusCode="404" />
<remove statusCode="500" />
<error statusCode="403" responseMode="ExecuteURL" path="Error403.aspx" />
<error statusCode="404" responseMode="ExecuteURL" path="Error404.aspx" />
<error statusCode="500" responseMode="ExecuteURL" path="Error500.aspx" />
</httpErrors>
</system.webServer>
Et dans les pages d'erreur aspx, vous devez faire quelque chose comme ceci (exemple de la page 404):
<%
Response.StatusCode = 404;
Response.TrySkipIisCustomErrors = true;
%>
Remarque: il n'est pas possible d' utiliser l'extension sans URL dans la section customErrors ! . (sans hacks)
Une solution consiste à désactiver les erreurs personnalisées et à laisser les erreurs http gérer la page personnalisée. Un ami a créé une telle configuration, quand je trouverai du temps, je partagerai le code.
Contexte
Une bonne page d'erreur personnalisée:
Donc, pour clarifier certaines options de notre config:
<customErrors mode="RemoteOnly"
. Vous pouvez spécifier ici: On
, Off
, RemoteOnly
.
On
= Toujours afficher les pages d'erreur personnaliséesOff
= Toujours afficher la vraie erreurRemoteOnly
= Afficher l'erreur localement, mais afficher la page d'erreur personnalisée à distance. Nous voulons donc RemoteOnly
pour la déclaration 1<customErrors redirectMode="ResponseRewrite"
. Vous pouvez spécifier ici: ResponseRedirect
ou ResponseRewrite
. Le ResponseRedirect
mode redirigera la page d'erreur vers la page d'erreur personnalisée. Pour un robot d'exploration de liens (SEO), cela entraînera 302 -> 500, mais vous voulez que le robot d'exploration de liens obtienne une erreur 500.
<httpErrors errorMode="DetailedLocalOnly"
. C'est l'équivalent du customErrors
mode. Options que vous avez: Custom
, Detailed
, DetailedLocalOnly
.
Un bon article de blog qui m'a beaucoup aidé est: http://benfoster.io/blog/aspnet-mvc-custom-error-pages
<customErrors>
contre <httpErrors>
<customErrors>
<httpErrors>
Remarque: il n'est plus nécessaire d'utiliser
customErrors
Source citée: Custom 404 et pages d'erreur dans ASP.NET (excellent article)
ExecuteURL
sert du contenu dynamique tel qu'une page .aspx (la path
valeur doit être une URL relative au serveur ):
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="ExecuteURL" >
<remove statusCode="404"/>
<error statusCode="404" responseMode="ExecuteURL" path="/error.aspx" />
</httpErrors>
</system.webServer>
File
diffuse un fichier d'erreur personnalisé, tel qu'une page .html:
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="File" >
<remove statusCode="404"/>
<error statusCode="404" path="404.html" />
</httpErrors>
</system.webServer>
Référence: Erreurs HTTP (www.iis.net)
pour plus de détails, lisez le lien www.iis.net ci-dessus
it's no loger necesary to use customErrors
et la citation, c'est vraiment l'info que j'étais après :-)
La section Erreurs de la configuration Web sert à fournir une approche personnalisée de gestion des erreurs http.Il y a deux sections, une customErrors dans la section system.web et une autre httpErrors dans la section system.webServer (comme indiqué ci-dessous)
customErrors: cette section était utilisée avant l'introduction d'IIS 7, IIS 6 5 et avant d'utiliser pleinement cette section pour gérer les erreurs http personnalisées en fonction du code d'état http.
httpErrors: IIS 7 et versions ultérieures utilisent cette section ainsi que la section customErrors pour gérer les erreurs http personnalisées en fonction de leurs extensions de fichier si l'extension de page est demandée, enregistrez-vous avec ISAPI dll (.aspx, ashx, .asmx, .svc, etc.) comme index.aspx puis IIS pick up setting from customeErrors section else it pick up setting from httpErrors (le mode hébergé IIS 7 doit être défini comme une ambiance intégrée et non classique)
Voici les exemples qui concernent le lien de vérification de la gestion des erreurs 404: