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?

141
demandé sur Richard Everett 2010-03-19 22:18:29

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 - utilisation customErrors
  • publier le site à IIS6 - utiliser customErrors
  • publier le site à IIS7 - utiliser httpErrors .

et si vous développez avec VSDS mais Publiez à IIS7 , alors je suppose que vous aurez besoin des deux.

75
répondu Pure.Krome 2017-04-13 12:13:38

*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:

  1. afficher la véritable exception lorsque vous visitez la page de problème localement
  2. afficher une page personnalisée lorsque vous visitez la page de problème à distance
  3. ne redirigera pas, mais afficher simplement le contenu de la page d'erreur (en raison de raisons de référencement)
  4. affichera le code d'état correct

donc pour clarifier quelques options dans notre config:

  1. 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
  2. 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.
  3. 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

108
répondu Maarten Kieft 2016-06-27 14:48:53

<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

31
répondu JohnB 2014-08-01 21:21:53

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:

httperrors vs customerrors in webconfig, iis, asp.net

4
répondu Rohit 2013-08-16 11:51:50