Quelle est la différence entre customErrors et httpErrors?
Quelle est la différence entre les sections customErrors
et httpErrors
du web?fichier de configuration ASP.NET les demandes de CVM?
quelles sont les lignes directrices pour utiliser chaque section?
4 réponses
Avertissement: Ceci est de mon expérience et pas fait.
les deux sont utilisés pour définir le traitement des erreurs pour un site Web, mais un logiciel différent se réfère à différents éléments de configuration.
customErrors
sont un héritage (en arrière compatible) élément, utilisé par le Serveur de Développement Visual Studio (aka. VV ou de Cassini).
httpErrors
sont le nouvel élément qui est utilisé uniquement par IIS7.
cela met en évidence le possible problème lors du développement ASP.NET sites Web tout en utilisant VSD au lieu de l'IIS local.
Aussi, reportez-vous à ce poste par moi-même sur la façon de gérer les messages d'erreur avec IIS7, si vous souhaitez avoir le plein contrôle de l'erreur de sortie.
résumé:
- développement en
VSDS
- utilisationcustomErrors
- publier le site à
IIS6
- utilisercustomErrors
- publier le site à
IIS7
- utiliserhttpErrors
.
et si vous développez avec VSDS
mais Publiez à IIS7
, alors je suppose que vous aurez besoin des deux.
*Mise À Jour Avril 2016
l'attribut customErrors est utilisé lorsque le code .net lance une exception (404, 403, 500 etc) et l'attribut httpErrors est utilisé lorsque IIS lui-même lance une exception.
- /myfakeextensionslessurl -- > httpErrors 404
- / myfakeaspsx.aspx -- > customErrors 404
- / myfakeimage.jpg -- > httpErrors 404
- / throw500.apx -- > customErrors 500
- / throw500 -- > customErrors 500
il y a beaucoup d'écueils à 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 (page exemple 404):
<%
Response.StatusCode = 404;
Response.TrySkipIisCustomErrors = true;
%>
Note: utiliser une extension sans urls dans la section customErrors est pas possible! . (sans pirate)
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.
arrière-plan
une bonne page d'erreur personnalisée sera:
- afficher la véritable exception lorsque vous visitez la page de problème localement
- afficher une page personnalisée lorsque vous visitez la page de problème à distance
- ne redirigera pas, mais afficher simplement le contenu de la page d'erreur (en raison de raisons de référencement)
- affichera le code d'état correct
donc pour clarifier quelques options dans notre config:
- customErrors mode="RemoteOnly". Vous pouvez spécifier ici: On, Off, RemoteOnly. Sur = toujours Afficher des pages d'erreur personnalisées, Off = Affiche toujours l'Erreur réelle, RemoteOnly = Afficher localement l'erreur, mais afficher la page d'erreur personnalisée à distance. Nous ne voulons donc que la Déclaration 1
- customeErrors redirectMode= "Responsabilerewrite". Vous pouvez vous déconnecter ici: Reponseredirect, Reponserewrite. Modus Responsieredirect redirigera la page d'erreur vers la page d'erreur personnalisée. Pour un link crawler (seo) cela donnera 302 -> 500. Alors que vous voulez le lien crawler pour obtenir tout simplement une erreur 500.
- httpErrors errorMode= "DetailedLocalOnly", c'est l'équivalent du mode customErrors. Options que vous avez: personnalisé ,détaillé, détaillé Local seulement
un bon billet de blog qui m'a beaucoup aidé est: http://benfoster.io/blog/aspnet-mvc-custom-error-pages
<customErrors>
versus <httpErrors>
<customErrors>
- toujours disponible en IIS7+
- spécifie des pages d'erreur personnalisées pour les requêtes traitées par ASP.NET
- ne traite que les demandes ASP.NET application
- les fichiers statiques tels que les fichiers HTML ou les URL de répertoire ("conviviales") ne sont pas traités
<httpErrors>
- introduit dans IIS7
- spécifier des pages d'erreur personnalisées pour les requêtes traitées par IIS
- traite les demandes ASP.NET application and/OR handles requests outside the - ASP.NET application *
- tous les fichiers et les Url sont traités *
Note: il est n'est plus nécessaire d'utiliser
customErrors
Cité source: 404 Personnalisée et des pages d'erreur dans ASP.NET (excellent article)
ExecuteURL
sert un contenu dynamique tel qu'un .aspx page (la valeur path
doit être un server relative URL ):
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="ExecuteURL" >
<remove statusCode="404"/>
<error statusCode="404" responseMode="ExecuteURL" path="/error.aspx" />
</httpErrors>
</system.webServer>
File
répond à un message d'erreur personnalisé fichier, tel qu'un .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, lire la www.iis.net lien au-dessus de
la section erreurs dans web config est pour fournir une approche personnalisée de gestion des erreurs http il y a deux sections, une customErrors à l'intérieur du système de section.web et un autre httpErrors à l'intérieur du système de section.webServer (voir ci-dessous)
customErrors: Cette section était utilisée avant L'introduction de IIS 7, IIS 6 5 et avant d'utiliser pleinement cette section pour traiter les erreurs http personnalisées selon le code de statut http.
httpErrors: IIS 7 et plus tard, utilisez cette section ainsi que la section customErrors pour traiter les erreurs HTTP personnalisées en fonction de leurs extensions de fichier si elles sont demandées extension de page enregistrer avec ISAPI dll (.aspx, ashx,.asmx,.svc etc) comme index.aspx IIS ramasser paramètre customeErrors "151940920 de la section" autre chose, elle ramasser paramètre httpErrors (IIS 7 mode hébergé doit être intégrée humeur pas classique)
ci-dessous sont les exemples qui sont pour 404 erreur handling check link: