2013-06-16 13 views
5

Sto usando ELMAH nel mio progetto mvc per registrare errori. Mi sono reso conto che a volte gli errori non venivano registrati. Così ho avvolto le dichiarazioni in try..catch e chiamato ErrorSignal.FromCurrentContext().Raise(ex); ma nulla viene registrato di nuovo per quell'errore specifico. Così ho provato ad inserire il codice sorgente ELMAH (usando Reflector VS addin). E ho visto questa eccezione in ELMAH:Errori non registrati in ELMAH

A potentially dangerous Request.Form value was detected from the client (Text="<br>"). 
StackTrace: at System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection) 

codice sorgente: this._form = CopyCollection(request.Form); in public Error(System.Exception e, HttpContext context) in Error.cs. e il metodo CopyCollection:

private static NameValueCollection CopyCollection(NameValueCollection collection) 
{ 
    if ((collection != null) && (collection.Count != 0)) 
    { 
     return new NameValueCollection(collection); 
    } 
    return null; 
} 

Quindi Net non consente la creazione di nuovi NameValueCollection dal pericolose dati del modulo. Ho un sacco di editor Html nella mia applicazione e voglio che ELMAH registri gli errori in qualsiasi situazione.

Cosa posso fare?

risposta

3

Sfortunatamente, this is due to a breaking change introduced by ASP.NET 4.0. Una soluzione in questo momento potrebbe essere quello di chiedere ASP.NET per ripristinare il comportamento vecchio aggiungendo il seguente alla propria configurazione:

<httpRuntime requestValidationMode="2.0" /> 

Per una discussione più completa, vedere issue #217 sul ELMAH project site.

+2

Ho notato che il problema n. 217 è stato risolto nel settembre 2012. Ci sono piani per rilasciare una nuova versione di Elmah? –

+1

@AtifAziz PLUSONE! Per favore, spingi su nuget? Questo problema è stato corretto anni fa ... Se il problema è che è necessario un framework> = 4, allora potrebbe esistere un pacchetto v4 nuget? –