Qual è la differenza tra customErrors e httpErrors?


168

Qual è la differenza tra le sezioni customErrorse httpErrorsdel file web.config nelle applicazioni ASP.NET MVC?

Quali sono le linee guida per l'utilizzo di ogni sezione?


1
IMHO - HttpError è una gestione a livello IIS per i messaggi di errore, mentre CustomError è la gestione ASP.Net per errori nell'applicazione Web. Ma mi piacerebbe saperne di più ...
Sunny

Risposte:


85

Disclaimer: questo è dalla mia esperienza e fatto non provato.

Entrambi vengono utilizzati per definire la gestione degli errori per un sito Web, ma software diverso fa riferimento a diversi elementi di configurazione.

customErrors sono un elemento legacy (retrocompatibile), utilizzato da Visual Studio Development Server (aka VSDS o Cassini).

httpErrors sono il nuovo elemento utilizzato solo da IIS7.

Ciò evidenzia il possibile problema durante lo sviluppo di siti Web ASP.NET durante l'utilizzo di VSDS anziché IIS locale.

Inoltre, fai riferimento a questo post da solo su come gestire i messaggi di errore con IIS7, se desideri avere il pieno controllo dell'output dell'errore.

Sommario:

  • Sviluppo in VSDSusocustomErrors
  • Pubblicazione del sito da IIS6utilizzarecustomErrors
  • Pubblicazione del sito da IIS7utilizzare httpErrors.

e se sviluppi con VSDSma pubblichi su IIS7, allora credo che avrai bisogno di entrambi.


30
customErrors è per asp.net. Gli httpError sono per IIS7 e quindi gestiscono i contenuti che non passano attraverso il gestore .net (ad es. .png, .js ecc.) Se si desidera pagine di errore per tipi di contenuto non.net, utilizzare le pagine di errore IIS (httpErrors per IIS7 , l'interfaccia utente per IIS6.)
zcrar70,

4
Consiglio di installare e utilizzare IIS 7 Express con Visual Studio per scopi di debug. Utilizzerà le stesse opzioni di configurazione di IIS 7 normale, a differenza di Cassini.
Sean,

non è più necessario utilizzare customErrors di @johnB. E troppo necessario? 1.) abilita "Invia errori al browser" nella sezione "ASP". le proprietà di debug 2.) in "Pagine di errore / Modifica impostazioni funzionalità", selezionare "Errori dettagliati". 3.) disable "Mostra i messaggi di errore HTTP" in IE stackoverflow.com/questions/2640526/...
Kiquenet

136

* Aggiornato aprile 2016

L'attributo customErrors viene utilizzato quando il codice .net genera un'eccezione (404, 403, 500 ecc.) E l'attributo httpErrors viene utilizzato quando IIS stesso genera un'eccezione.

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

Ci sono molte insidie ​​che provano a configurarlo correttamente. Quindi, se stai cercando un rapido esempio, le 2 migliori opzioni che hai sono:

Esempio 1: utilizzo di pagine 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>

Esempio 2: utilizzo delle pagine 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>

E nelle pagine di errore aspx devi fare qualcosa del genere (esempio 404 pagina):

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

Nota: non è possibile utilizzare l'estensione meno URL nella sezione customErrors ! . (senza hack)

Una soluzione è disabilitare gli errori personalizzati e consentire agli errori http di gestire la pagina personalizzata. Un amico ha creato una tale configurazione, quando trovo un po 'di tempo, condividerò il codice.

sfondo

Una buona pagina di errore personalizzata:

  1. Mostra la vera eccezione quando visiti la pagina del problema localmente
  2. Mostra una pagina personalizzata quando visiti la pagina del problema in remoto
  3. Non reindirizzerà, ma mostrerà semplicemente il contenuto della pagina di errore (per motivi di seo)
  4. Mostrerà il codice di stato corretto

Quindi, per chiarire alcune opzioni nella nostra configurazione:

  1. <customErrors mode="RemoteOnly". È possibile specificare qui: On, Off, RemoteOnly.

    • On = Mostra sempre pagine di errore personalizzate
    • Off = Mostra sempre l'errore reale
    • RemoteOnly= Mostra l'errore localmente, ma mostra la pagina di errore personalizzata in remoto. Quindi vogliamo RemoteOnlyper l'istruzione 1
  2. <customErrors redirectMode="ResponseRewrite". È possibile specificare qui: ResponseRedirecto ResponseRewrite. La ResponseRedirectmodalità reindirizzerà la pagina di errore alla pagina di errore personalizzata. Per un crawler di link (SEO), ciò comporterà 302 -> 500, ma si desidera che il crawler di link ottenga un errore 500.

  3. <httpErrors errorMode="DetailedLocalOnly". Questo è l'equivalente della customErrorsmodalità. Le opzioni che si hanno: Custom, Detailed, DetailedLocalOnly.

Un buon post sul blog che mi ha aiutato molto è: http://benfoster.io/blog/aspnet-mvc-custom-error-pages


Che tipo di relazione customErrors - httpErrors e IIS configurano come "Invia errori al browser" in ASP - Proprietà di debug e "Pagine di errore / Modifica impostazioni funzionalità", "Errori dettagliati". ? stackoverflow.com/questions/2640526/...
Kiquenet

36

<customErrors> contro <httpErrors>


<customErrors>

  • ancora disponibile in IIS7 +
  • specifica le pagine di errore personalizzate per le richieste gestite da ASP.NET
  • gestisce solo le richieste all'interno dell'applicazione ASP.NET
  • i file statici come file HTML o URL di directory ("amichevoli") non vengono gestiti

<httpErrors>

  • introdotto in IIS7
  • specifica le pagine di errore personalizzate per le richieste gestite da IIS
  • gestisce le richieste all'interno dell'applicazione ASP.NET E / O gestisce le richieste all'esterno dell'applicazione - ASP.NET *
  • tutti i file e gli URL sono gestiti *

Nota: non è più necessario utilizzare customErrors

Fonte citata: 404 personalizzati e pagine di errore in ASP.NET (articolo eccellente)


ExecuteURLoffre contenuti dinamici come una pagina aspx (il pathvalore deve essere un URL relativo al server ):

<system.webServer>
  <httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="ExecuteURL" >
    <remove statusCode="404"/>
    <error statusCode="404" responseMode="ExecuteURL" path="/error.aspx" />
  </httpErrors>
</system.webServer>

File offre un file di errore personalizzato, ad esempio una pagina html:

<system.webServer>
  <httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="File" >
    <remove statusCode="404"/>
    <error statusCode="404" path="404.html" />
  </httpErrors>
</system.webServer>

Riferimento: errori HTTP (www.iis.net)

per maggiori dettagli, leggi il link www.iis.net sopra


Forse utile ** stackoverflow.com/questions/2640526/... ** se combinare httpErrors con "Send errori al browser" e pagine di errore
Kiquenet

3
+1 per la nota it's no loger necesary to use customErrorse la citazione, questa è davvero l'informazione che stavo
cercando

4

La sezione degli errori nella configurazione web serve per fornire un approccio personalizzato alla gestione degli errori http: ci sono due sezioni, una personalizzata Errori all'interno della sezione system.web e un altro httpErrori all'interno della sezione system.webServer (come indicato di seguito)

customErrors: questa sezione era in uso prima dell'introduzione di IIS 7, IIS 6 5 e prima di utilizzare completamente questa sezione per gestire gli errori http personalizzati in base al codice di stato http.

httpErrors: IIS 7 e versioni successive utilizzano questa sezione e la sezione customErrors per gestire gli errori http personalizzati in base alle loro estensioni di file se richiesto registro delle estensioni di pagina con DLL ISAPI (.aspx, ashx, .asmx, .svc ecc.) come index.aspx quindi IIS preleva le impostazioni dalla sezione customeErrors altrimenti preleva le impostazioni da httpErrors (la modalità host IIS 7 deve essere impostata come mood integrato non classico)

di seguito sono riportati gli esempi relativi al collegamento di controllo della gestione degli errori 404:

httperrors vs customerrors in webconfig, iis, asp.net

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.