Domanda

Qual è la differenza tra customErrors E httpErrors sezioni del file web.config nelle applicazioni ASP.NET MVC?

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

È stato utile?

Soluzione

Disclaimer: Questo è dalla mia esperienza e non provata fatto

.

Entrambi sono usati per definire la gestione di un sito web di errore, ma diversi software si riferisce a diversi elementi di configurazione.

customErrors sono un'eredità elemento (indietro compatibile), utilizzato da Visual Studio Development Server (aka. VSDS o Cassini).

httpErrors sono il nuovo elemento che viene utilizzato solo da IIS7.

Ciò evidenzia la possibile problema quando lo sviluppo di siti web ASP.NET durante l'utilizzo di VSDS invece del IIS locale.

Inoltre, vedi questo post da me su come gestire i messaggi di errore con IIS7, se si desidera avere il pieno controllo del output degli errori.

Sommario:

  • Sviluppo in VSDS - uso customErrors
  • La pubblicazione del sito per IIS6 - uso customErrors
  • La pubblicazione del sito per IIS7 -. L'uso httpErrors

e se si sviluppa con VSDS ma pubblicare a IIS7, allora credo che u'll bisogno di entrambe le cose.

Altri suggerimenti

*Aggiornato ad 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 --> httpErrori 404
  • /myfakeaspsx.aspx --> customErrors 404
  • /myfakeimage.jpg --> httpErrori 404
  • /throw500.apx --> customErrors 500
  • /throw500 --> customErrors 500

Ci sono molte insidie ​​​​nel tentativo di configurarlo correttamente.Quindi, se stai cercando un esempio veloce, 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:utilizzando 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 pagina 404):

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

Nota:L'uso degli URL con estensione inferiore nella sezione customErrors è non possibile!. (senza hack)

Una soluzione alternativa è disabilitare gli errori personalizzati e consentire agli errori http di gestire la pagina personalizzata.Un amico ha creato tale configurazione, quando avrò 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 da remoto
  3. Non reindirizzerà, ma mostrerà semplicemente il contenuto della pagina di errore (per motivi SEO)
  4. Mostrerà il codice di stato corretto

Quindi, per chiarire alcune opzioni nella nostra configurazione:

  1. <customErrors mode="RemoteOnly".Puoi 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 RemoteOnly per l'affermazione 1
  2. <customErrors redirectMode="ResponseRewrite".Puoi specificare qui: ResponseRedirect O ResponseRewrite.IL ResponseRedirect mode reindirizzerà la pagina di errore alla pagina di errore personalizzata.Per un crawler di link (SEO), ciò risulterà in 302 -> 500, ma vuoi che il crawler di link riceva un errore 500.

  3. <httpErrors errorMode="DetailedLocalOnly".Questo è l'equivalente di customErrors modalità.Opzioni che hai: 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>

  • ancora disponibile in IIS7 +
  • specificare pagine di errore personalizzate per le richieste gestite da ASP.NET
  • gestisce solo le richieste all'interno dell'applicazione ASP.NET
  • file statici, tali come file HTML o directory ( “friendly”) gli URL non vengono gestite

<httpErrors>

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

Nota: non è più necessario utilizzare customErrors

fonte citata: 404 personalizzata e di errore pagine in ASP.NET (articolo eccellente)


ExecuteURL serve contenuto dinamico come ad esempio una pagina aspx (il valore path deve essere un Server URL relativo ):

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

File serve 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: HTTP Errori (www.iis.net)

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

sezione Errori in Web di configurazione è di fornire personalizzato la gestione approccio errore http ci sono due sezioni, una customErrors all'interno della sezione system.web e un altro httpErrors all'interno della sezione di system.webServer (come indicato di seguito)

customErrors: Questa sezione era in uso prima di IIS 7 ha introdotto, IIS 6 5 e prima di utilizzare pienamente questa sezione per la gestione degli errori HTTP personalizzate in base al codice di stato HTTP.

httpErrors: IIS 7 e successive usano questa sezione così come customErrors per gestire gli errori HTTP personalizzati in base alle loro estensioni di file se il registro estensione pagina richiesta con ISAPI DLL (aspx, ashx, asmx, .svc ecc) come index.aspx poi IIS raccogliere l'impostazione da customeErrors altrimenti raccogliere l'impostazione da httpErrors (IIS 7 modalità hosted deve essere impostato come stato d'animo integrato non classica)

Di seguito sono gli esempi che è per 404 errore di collegamento di controllo movimentazione:

httpErrors vs customErrors in WebConfig, IIS, asp.net

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top