Modalità CustomErrors = "Off"


254

Ricevo un errore ogni volta che carico la mia webapp sul provider. A causa della modalità customErrors, tutto ciò che vedo è il messaggio "Errore di runtime" predefinito, che mi indica di disattivare customErrors per visualizzare ulteriori informazioni sull'errore.

Esasperato, ho impostato il mio web.config in questo modo:

<?xml version="1.0"?>
<configuration>
    <system.web>
        <customErrors mode="Off"/>
    </system.web>
</configuration>

E ancora, tutto ciò che ottengo è la stupida pagina di errori remoti senza informazioni utili su di essa. Cos'altro posso fare per disattivare gli errori personalizzati ?!


1
prova ad aggiungere @Model.Exception.MessageaShared/Error.cshtml
Muflix il

In generale, fai attenzione alle trasformazioni di configurazione (ad es. Web.Debug.config che potrebbe cambiare quel valore) e fai attenzione alle definizioni duplicate di quella sezione / proprietà nel file (chiaramente non era il problema in questo caso)
Graham

Risposte:


165

Questo mi ha fatto impazzire negli ultimi giorni e non sono riuscito a evitarlo ma alla fine l'ho capito:

Nel mio file machine.config avevo una voce sotto <system.web>:

<deployment retail="true" />

Questo sembra sovrascrivere qualsiasi altra impostazione customError specificata in un file web.config, quindi impostando la voce sopra su:

<deployment retail="false" />

ora significa che posso ancora una volta visualizzare i messaggi di errore dettagliati di cui ho bisogno.

Si machine.configtrova a

32-bit

%windir%\Microsoft.NET\Framework\[version]\config\machine.config

64-bit

%windir%\Microsoft.NET\Framework64\[version]\config\machine.config 

Spero che aiuti qualcuno là fuori e risparmi qualche ora di strappi.


Buon punto. È meglio riportare la modalità di vendita al dettaglio su true al termine (o disattivare la modalità di debug in web.config, che sarà fastidioso per la tua macchina di sviluppo). Vedi weblogs.asp.net/lasse/archive/2009/04/28/…
Stephen Kennedy,

Questa sembra essere un'impostazione predefinita in .NET 4.0 - ho avuto lo stesso problema a capirlo. Concordo sul fatto che sia una buona impostazione da utilizzare in un ambiente di produzione, ma vedere l'errore REALE è molto importante durante il debug.
Jeremy,

non solo mi ha salvato il tempo, mi ha anche salvato la vita. questo è stato esattamente ciò che ha funzionato per me
Pouya Samie il

142

"Off" distingue tra maiuscole e minuscole.

Controlla se la "O" è in maiuscolo nel tuo file web.config, l'ho subito un paio di volte (semplice come sembra)


49

Nell'interesse di aggiungere più situazioni a questa domanda (perché è lì che ho guardato perché avevo lo stesso identico problema), ecco la mia risposta:

Nel mio caso, ho tagliato / incollato il testo dall'errore generico dicendo in effetti se vuoi vedere cosa c'è che non va, metti

<system.web>
   <customErrors mode="Off"/>
</system.web>

Quindi questo avrebbe dovuto risolverlo, ma ovviamente no! Il mio problema era che c'era un nodo <system.web> diverse righe sopra (prima di un nodo di compilazione e autenticazione) e un tag di chiusura </system.web> alcune righe sotto. Una volta corretto, OK, problema risolto. Quello che avrei dovuto fare è copiare / incollare solo questa riga:

<customErrors mode="Off"/>

Questo è dagli annali di Stupid Things che continuo a fare ancora e ancora, nel capitolo intitolato "Copia e incolla la tua strada verso la distruzione".


Domanda: questa risposta implica che ASP legge web.config e altri file di configurazione dall'alto, ovvero: dall'alto in basso. Pensavo che i file di configurazione fossero letti come una "singola istanza", il che significa che il compilatore prima analizza il file di configurazione per accuratezza e poi lo compila, ma sembra che lo stia compilando al volo riga per riga. È vero?
Fandango68,

@ Fernando68, potrebbe essere meglio inserire una domanda separata: una discussione nei commenti non è esattamente ottimale. Non sono un ingegnere .NET, ma chiaramente .NET non lo sta compilando riga per riga. È un file Xml ed è quindi gerarchico. Ma se la gerarchia è scarsamente formata, il parser Xml genererà un'eccezione durante l'analisi. In altre parole, deve prendere l'intero file Xml nel suo insieme - ma se incontra un Xml difettoso non può affatto costruire l'oggetto richiesto!
Cyberherbalist,

L'ho già sollevato come domanda separata stackoverflow.com/questions/30471043/… . Grazie per la tua risposta, che è effettivamente la risposta che ho ricevuto nel mio altro post. Saluti
Fandango68,

10

Per le applicazioni Sharepoint 2010, è inoltre necessario modificare C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS\web.confige definire<customErrors mode="Off" />


7

Ho provato la maggior parte delle cose descritte qui. Stavo usando VWD e il file web.config predefinito conteneva:

    <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
        <error statusCode="403" redirect="NoAccess.htm" />
        <error statusCode="404" redirect="FileNotFound.htm" />
    </customErrors>

Ho cambiato mode = "RemoteOnly" in mode = "Off". Ancora nessuna gioia. Ho quindi usato il gestore IIS, le proprietà, la scheda ASP.Net, la modifica della configurazione, quindi ho scelto la scheda CustomeErrors. Ciò mostrava ancora RemoteOnly. Ho cambiato questo in Off e finalmente ho potuto vedere i messaggi di errore dettagliati.

Quando ho ispezionato il web.config ho visto che c'erano due nodi CustomErrors in system.web; e ho appena notato che la seconda voce (quella che stavo cambiando era all'interno di un commento). Quindi cerca di non usare il blocco note per ispezionare web.config su un server remoto.

Tuttavia, se si utilizza la configurazione di modifica di IIS, si lamenterà degli errori nel web.config. Quindi puoi escludere tutte le risposte che dicono "c'è un errore di sintassi XML nel tuo web.config"


La modifica del web.config a livello di sito Web ha funzionato per me. In precedenza avevo armeggiato con il caricamento del file web.config dell'applicazione, non riuscendo. Grazie!
The1nk

7

L'unica risposta che ha effettivamente funzionato per risolvere questo problema ho trovato qui: https://stackoverflow.com/a/18938991/550975

Aggiungi questo al tuo web.config:

<configuration>  
  <system.webServer>  
    <httpErrors existingResponse="PassThrough"/>  
  </system.webServer>  
<configuration>

3
Ho scoperto che <httpErrors errorMode="Detailed" />mi dava tutte le informazioni di cui avevo bisogno »
alastairtree,


5

Ho avuto anche questo problema, ma quando si utilizza Apache e mod_mono. Per chiunque si trovi in ​​quella situazione, è necessario riavviare Apache dopo aver modificato web.config per forzare la lettura della nuova versione.


5

Se stai ancora ricevendo quella pagina, è probabile che stia saltando in aria prima di superare Web.Config

Assicurati che ASP.Net disponga delle autorizzazioni necessarie per cose come le cartelle .Net Framework, la metabase IIS, ecc. Hai modo di verificare che ASP.Net sia installato correttamente e associato correttamente in IIS?

Modifica: dopo il commento di Greg che mi è venuto in mente, ho pensato che quello che hai pubblicato fosse il tuo web.config molto minimale, c'è dell'altro? In tal caso è possibile pubblicare l'intero web.config?


Le poche volte in cui ho riscontrato questo problema, si è rivelato essere un errore nel web.config - sicuramente andarci sopra con un pettine a denti fini prima.
Greg Hurlman,

Sì, esasperato, ho sostituito il mio web.config a queste impostazioni minime. Ancora nessuna gioia
Radu094,

L'utente nel pool di applicazioni in uso non disponeva delle autorizzazioni di lettura per la directory in cui è stata distribuita la mia app. Non riesco ancora a capire perché non riesco a visualizzare un errore che mi mostri che è stato il problema.
Lambacck,

Spesso questo errore può essere trovato solo nel registro degli eventi di sistema / sicurezza (fino a IIS 7), ma nella maggior parte dei casi è facile accedere al registro degli eventi.
Nick Craver

5

Il mio problema era che avevo definito questo nel mio web.config

<httpErrors errorMode="Custom" existingResponse="Replace">
  <remove statusCode="404" />
  <remove statusCode="500" />
  <error statusCode="404" responseMode="ExecuteURL" path="/Error/NotFound" />
  <error statusCode="500" responseMode="ExecuteURL" path="/Error/Internal" />
</httpErrors>

2
Un sostituto per <httpErrors errorMode="Detailed"aiutare come esempio
it3xl

2

In realtà, quello che ho capito durante l'hosting della mia app Web è il codice che hai sviluppato sulla tua macchina locale è di versione superiore rispetto a quella che la società di hosting ti offre. Se si dispone dei privilegi di amministratore, è possibile modificare il supporto della versione di Microsoft ASP.NET nelle impostazioni di hosting web


2

Abbiamo riscontrato questo problema ed è dovuto al fatto che l'utente IIS non ha accesso alla configurazione della macchina sul server Web.


2

Abbiamo anche riscontrato questo errore e nel nostro caso era perché l'utente del pool di applicazioni non aveva più le autorizzazioni per il file web.config. Il motivo per cui ha perso i suoi permessi (tutto andava bene prima) era perché avevamo un backup del sito in un file rar e ho trascinato una versione di backup di web.config dal rar nel sito. Questo sembra aver rimosso tutte le autorizzazioni per il file web.config tranne me, l'utente che ha effettuato l'accesso.

Ci è voluto un po 'per capirlo perché ho controllato ripetutamente le autorizzazioni a livello di cartella, ma mai a livello di file.


2

Ho avuto lo stesso problema ma ho trovato la risoluzione in modo diverso.

-

Quello che ho fatto è stato aprire Impostazioni avanzate per il pool di applicazioni in Gestione IIS .

Lì ho impostato Abilita applicazioni a 32 bit su True .


1

Prova a riavviare l'applicazione (la creazione di un'app_offline.htm rispetto alla sua eliminazione farà) e se ricevi ancora lo stesso messaggio di errore, assicurati di aver dichiarato customErrors solo una volta nel web.config o qualcosa del genere. Gli errori nel web.config possono avere un impatto strano sull'applicazione.


1
ogni volta che modifichi web.config il sito Web viene riavviato, non è necessario creare un app_offline.htm!
Matt Frear

vero, non ho idea del perché ho suggerito a app_offline di ripristinare l'app. :)
Adam Vigh,

1

Hai qualche personaggio speciale come æøå nel tuo web.config? In tal caso, assicurarsi che la codifica sia impostata su utf-8.


1

Questa app Web è impostata sotto altre app nell'albero delle directory di un sito Web? Controllare eventuali file web.config principali per altre impostazioni, se presenti. Inoltre, rendi la tua directory impostata come directory applicativa in IIS.


1

Se si utilizza l'anteprima MVC 4, è possibile che si verifichi questo perché si sta utilizzando HandleErrorAttribute. Il comportamento è cambiato in 5 in modo che non gestisca le eccezioni se si disattivano gli errori personalizzati.


1

Puoi anche provare a visualizzare il sito Web in un browser sul computer server. Non faccio molto sviluppo ASP.NET, ma ricordo che la cosa degli errori personalizzati ha un'impostazione per visualizzare solo il testo di errore completo sul server, come misura di sicurezza.


1

Ho appena affrontato un problema simile. Nel mio caso la versione di asp.net del sito predefinito era 1.1 mentre cercavo di avviare un'app Web 2.0. L'errore è stato piuttosto banale, ma non è stato immediatamente chiaro il motivo per cui gli errori personalizzati non sarebbero scomparsi e il runtime non ha mai scritto nel registro eventi. La soluzione ovvia era quella di abbinare la versione nella scheda Asp.Net di IIS.


abbiamo avuto lo stesso problema. Il nodo "connectionstrings" stava causando errori nel framework 1.1, mentre l'app avrebbe dovuto essere 2.0
mosheb


0

Ho avuto lo stesso problema e la causa era che IIS eseguiva ASP.NET 1.1 e il sito richiedeva .NET 2.0.

Il messaggio di errore non ha fatto altro che gettarmi fuori pista per diverse ore.


0

Assicurati di aggiungere subito dopo il system.web

L'ho messo verso la fine del nodo e non ha funzionato.


0

Se si sta eseguendo una trasformazione di configurazione, potrebbe essere necessario rimuovere anche la seguente riga dal file web.config pertinente.

<compilation xdt:Transform="RemoveAttributes(debug)" />

0

Dopo aver provato tutte le risposte qui, si è scoperto che il mio Application_Errormetodo aveva questo:

Server.ClearError();
Response.Redirect("/Home/Error");

La rimozione di queste righe e l'impostazione risolto il problema. (Il client è stato comunque reindirizzato alla pagina di errore con customErrors="On").


0

Ho avuto lo stesso problema e ho esaminato il registro dell'applicazione del Visualizzatore eventi in cui è indicato chiaramente a causa dell'eccezione. Nel mio caso l'eccezione era come di seguito ...

Informazioni sull'eccezione:

Exception type: HttpException 
Exception message: The target principal name is incorrect.  Cannot generate SSPI context.
at System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app)
at System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers)
at System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context)
at System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context)
at System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext)

The target principal name is incorrect.  Cannot generate SSPI context.

Ho appena aggiornato la mia password nel pool di applicazioni e funziona per me.


0

In alcuni casi è anche possibile che web.config non sia formattato correttamente. In tal caso, è necessario esaminarlo riga per riga prima che funzioni. Spesso, le regole di riscrittura sono il colpevole qui.


0

È davvero strano. Ho ricevuto questo errore e dopo il riavvio del mio server è scomparso.


0

Per me è stato un errore più in alto nel web.config sopra il system.web.

il file blah non esisteva, quindi stava generando un errore a quel punto. Perché non era ancora arrivato alla sezione System.Web, ma stava usando l'impostazione predefinita del server per CUstomErrors (On)


(Questo post non sembra fornire una risposta di qualità alla domanda. Per favore, modifica la tua risposta e migliorala, o semplicemente pubblicala come commento alla domanda.)
sɐunıɔ ןɐ qɐp
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.