Domanda

Questa domanda è una specie di legato alla Handle URI l'hacking con grazia in ASP.NET in quanto è anche su come gestire meglio le eccezioni che si verificano nel corso di un ciclo di vita richiesta ASP.NET. Ho trovato un modo per gestire la maggior parte delle eccezioni con grazia, ma poi ho scoperto che alcune eccezioni si verificano così tardi nella richiesta che non c'è modo di fare cose come Server.Transfer al compartementalize tutta la logica di presentazione errore nella propria pagina.

Quindi, devo gestire l'eccezione all'interno della manifestazione Application_Error invece, e fare Response.Writes e quant'altro. È brutto. Capisco che in alcune circostanze potrebbe essere già stata lavata il flusso di risposta, in modo da trasferire la richiesta non è realmente un'opzione. Quello che voglio porre è se c'è qualcuno che ha trovato una soluzione elegante a questo problema?

Inoltre, trovo difficile sapere quando posso gestire l'eccezione grazia trasferendo la richiesta a un'altra pagina e non. Qual è il modo migliore per scoprire dove nel ciclo di vita richiesta siamo in quando si verifica un'eccezione? Se si verifica durante il caricamento e il rendering di una pagina, Page_Error sarà in grado di gestire la cosa e non ho avuto un problema facendo Server.Transfer c'è ancora. Ma se si verifica l'eccezione o troppo presto o troppo tardi per Page_Error di prenderlo e bolle a Application_Error, cosa devo fare per sapere se è presto o tardi?

Se è in ritardo nel ciclo di vita, io probabilmente devo fare Response.Write direttamente da Application_Error, ma se è presto che posso fare Server.Transfer. Il problema è che cercando di fare Server.Transfer farà per sé causare un'eccezione se è troppo nella richiesta di farlo.

Quindi, c'è un'enumerazione globale o qualcosa di simile che indicherà se è troppo tardi per fare cose creative con la risposta o no?

È stato utile?

Soluzione

Ho usato questo approccio per catturare tutti gli errori generati, sia nei controlli Web o pagine. Tutto ciò che richiede di fare è quello di ereditare da una classe di base (uno per le pagine e uno per UserControls) ogni pagina o UserControl in grado di implementare il proprio metodo HandleException e fare tutto ciò che deve fare. codice completo qui:

trasparente la gestione delle eccezioni generico per asp.net / MOSS2007 (con codice)

Altri suggerimenti

Credo che il mio consiglio per questo sarebbe quella di utilizzare ASP.NET Salute Monitoraggio con WMI provider di eventi per gli errori:

Ecco un come.

http://msdn.microsoft.com/en-us/library /ms178713.aspx

Spero che questo aiuti:

Andrew

Vi suggerisco di utilizzare la configurazione asp.net per avere una pagina di errore generale per le eccezioni non gestite. Dal web.config campione

    <!--
        The <customErrors> section enables configuration 
        of what to do if/when an unhandled error occurs 
        during the execution of a request. Specifically, 
        it enables developers to configure html error pages 
        to be displayed in place of a error stack trace.

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

Al gestore globale, fare il login l'eccezione, e lasciare che asp.net fare il redirect.

Se si vuole ancora andare avanti con il vostro approccio cliente, vi consiglio di guardare alla fonte asp.net disponibili e controllare come si sta facendo.

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