Qual è la differenza tra le sezioni customErrors
e httpErrors
del file web.config nelle applicazioni ASP.NET MVC?
Quali sono le linee guida per l'utilizzo di ogni sezione?
Qual è la differenza tra le sezioni customErrors
e httpErrors
del file web.config nelle applicazioni ASP.NET MVC?
Quali sono le linee guida per l'utilizzo di ogni sezione?
Risposte:
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.
VSDS
usocustomErrors
IIS6
utilizzarecustomErrors
IIS7
utilizzare httpErrors
.e se sviluppi con VSDS
ma pubblichi su IIS7
, allora credo che avrai bisogno di entrambi.
* 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.
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:
Quindi, per chiarire alcune opzioni nella nostra configurazione:
<customErrors mode="RemoteOnly"
. È possibile specificare qui: On
, Off
, RemoteOnly
.
On
= Mostra sempre pagine di errore personalizzateOff
= Mostra sempre l'errore realeRemoteOnly
= Mostra l'errore localmente, ma mostra la pagina di errore personalizzata in remoto. Quindi vogliamo RemoteOnly
per l'istruzione 1<customErrors redirectMode="ResponseRewrite"
. È possibile specificare qui: ResponseRedirect
o ResponseRewrite
. La ResponseRedirect
modalità 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.
<httpErrors errorMode="DetailedLocalOnly"
. Questo è l'equivalente della customErrors
modalità. 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
<customErrors>
contro <httpErrors>
<customErrors>
<httpErrors>
Nota: non è più necessario utilizzare
customErrors
Fonte citata: 404 personalizzati e pagine di errore in ASP.NET (articolo eccellente)
ExecuteURL
offre contenuti dinamici come una pagina aspx (il path
valore 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
it's no loger necesary to use customErrors
e la citazione, questa è davvero l'informazione che stavo
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: