Question

Quelle est la différence entre les sections de customErrors et httpErrors du fichier web.config dans les applications ASP.NET MVC?

Quelles sont les lignes directrices pour l'utilisation de chaque section?

Était-ce utile?

La solution

Avertissement: Ceci est de mon expérience et non prouvé fait

.

Les deux sont utilisés pour définir la gestion des erreurs pour un site Web, mais un autre logiciel fait référence à différents éléments de configuration.

customErrors sont un héritage (en arrière compatable) élément, utilisé par le développement Visual Studio Server (aka. VSDS ou Cassini).

httpErrors sont le nouvel élément qui est utilisé uniquement par IIS7.

Ceci met en évidence le possible problème lors du développement de sites ASP.NET en utilisant VSDS au lieu de l'IIS local.

En outre, se référer à ce poste par moi-même sur la façon de traiter les messages d'erreur avec IIS7, si vous souhaitez avoir le contrôle total de la sortie d'erreur.

Résumé:

  • Développement en VSDS - customErrors utilisation
  • Publication du site IIS6 - utilisation customErrors
  • Publication du site IIS7 -. httpErrors utilisation

et si vous développez avec VSDS mais publiez sur IIS7, alors je suppose que u'll ont besoin des deux.

Autres conseils

* Mise à jour Avril 2016

Les customErrors attribut est utilisé lorsque le code .net jette une exception (404, 403, 500, etc.) et les httpErrors attribut est utilisé lorsque IIS se jette une exception.

  • / myfakeextensionslessurl -> httpErrors 404
  • /myfakeaspsx.aspx -> customErrors 404
  • /myfakeimage.jpg -> httpErrors 404
  • /throw500.apx -> customErrors 500
  • / throw500 -> customErrors 500

Il y a beaucoup de pièges essayant de configurer cela correctement. Donc, si vous cherchez un exemple rapide, les 2 meilleurs 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: en utilisant des 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 que vous devez faire quelque chose comme ceci (exemple page 404):

<% 
    Response.StatusCode = 404;
    Response.TrySkipIisCustomErrors = true;
 %>

Remarque:. Utiliser moins d'extension dans la section urls customErrors est pas possible (sans hacks)

Un travail est autour de désactiver les erreurs personnalisées et laisser erreurs http gérer la page personnalisée. Un ami a créé une telle configuration, quand je trouve un peu de temps, je vais partager le code.

Historique

Une bonne page d'erreur personnalisée sera:

  1. Afficher la véritable exception lorsque vous visitez la page de problème sur place
  2. Afficher une page personnalisée lorsque vous visitez la page de problème à distance
  3. Est-ce pas rediriger, mais simplement montrer le contenu de la page d'erreur (pour des raisons seo)
  4. affiche le code d'état correct

Donc, pour clarifier certaines options dans notre config:

  1. <customErrors mode="RemoteOnly". Vous pouvez spécifier ici. On, Off, RemoteOnly

    • On = Toujours afficher les pages d'erreur personnalisées
    • Off = Toujours afficher l'erreur réelle
    • RemoteOnly = Afficher l'erreur au niveau local, mais afficher la page d'erreur personnalisée à distance. Nous voulons donc RemoteOnly pour déclaration 1
  2. <customErrors redirectMode="ResponseRewrite". Vous pouvez spécifier ici: ResponseRedirect ou ResponseRewrite. Le mode ResponseRedirect redirigera la page d'erreur sur la page d'erreur personnalisée. Pour un robot de liaison (SEO), cela se traduira par 302 -.> 500, mais vous voulez que le robot de lien pour obtenir une erreur 500

  3. <httpErrors errorMode="DetailedLocalOnly". Cela l'équivalent du mode customErrors. Options que vous avez. Custom, Detailed, DetailedLocalOnly

Un bon message de blog qui m'a beaucoup aidé est: http: // Ben Foster .io / blog / aspnet-mvc-mesure erreurs pages

<customErrors> par rapport <httpErrors>


<customErrors>

  • toujours disponible dans IIS7 +
  • spécifier des pages d'erreur personnalisées pour les demandes traitées par ASP.NET
  • traite uniquement les demandes dans l'application ASP.NET
  • fichiers statiques tels que les fichiers HTML ou URL répertoire ( « friendly ») ne sont pas traités

<httpErrors>

  • introduit dans IIS7
  • spécifier des pages d'erreur personnalisées pour les demandes traitées par IIS
  • traite les demandes dans l'application ASP.NET ET / OU traite les demandes en dehors de la - application ASP.NET *
  • tous les fichiers et les URL sont gérées *
  

Note: il n'est plus nécessaire d'utiliser customErrors

Source Quoted: personnalisées 404 et pages d'erreur dans ASP.NET de (excellent article)


ExecuteURL sert du contenu dynamique comme une page .aspx (la valeur de path doit être un serveur par rapport 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 sert un fichier d'erreur personnalisé, comme 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: HTTP Erreurs (www.iis.net)

pour plus de détails, consultez le lien ci-dessus www.iis.net

Erreurs section dans la configuration de la bande est de fournir il y a deux sections approche de traitement d'erreur HTTP personnalisé, un customErrors l'intérieur de la section system.web et un autre à l'intérieur du httpErrors system.webServer de section (comme indiqué ci-dessous)

customErrors: Cette section a été utilisé avant IIS 7 introduit, IIS 6 5 et avant d'utiliser pleinement cette section pour la gestion des erreurs personnalisées http en fonction du code d'état HTTP.

httpErrors: IIS 7 et versions ultérieures utilisent cette section ainsi que customErrors pour gérer les erreurs personnalisées http en fonction de leurs extensions de fichier si registre extension page demandée avec dll ISAPI (.aspx, ashx, .asmx, .svc etc.) comme index.aspx puis IIS chercher paramètre à partir de customeErrors sinon il ramasser la mise de httpErrors (IIS 7 mode hébergé doit être défini comme l'humeur intégrée non classique)

ci-dessous sont les exemples qui est pour l'erreur 404 lien de contrôle de gestion:

httpErrors vs customerrors dans webconfig, IIs, asp.net

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top