2013-06-16 7 views
5

Ich verwende ELMAH in meinem MVC-Projekt, um Fehler aufzuzeichnen. Ich habe festgestellt, dass manchmal Fehler nicht aufgezeichnet wurden. Also habe ich die Anweisungen in try..catch eingepackt und ErrorSignal.FromCurrentContext().Raise(ex); aufgerufen, aber nichts wird wieder für diesen spezifischen Fehler aufgezeichnet. Also habe ich versucht, in den ELMAH Quellcode zu treten (mit Reflector VS Addin). Und ich sah, diese Ausnahme in Elmah:Fehler nicht in ELMAH aufgezeichnet

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) 

tatsächliche Quellcode: this._form = CopyCollection(request.Form); in public Error(System.Exception e, HttpContext context) in Error.cs. und CopyCollection Methode:

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

So .Net erlaubt keine neue Namevaluecollection von gefährlich Formulardaten zu schaffen. Ich habe eine Menge HTML-Editoren in meiner Anwendung und möchte, dass ELMAH Fehler in jeder Situation aufzeichnet.

Was kann ich tun?

Antwort

3

Leider this is due to a breaking change introduced by ASP.NET 4.0. Eine Abhilfe jetzt wäre ASP.NET zu stellen, indem Sie folgende an der Konfiguration auf das ältere Verhalten wieder zurück:

<httpRuntime requestValidationMode="2.0" /> 

Für eine vollständigere Diskussion siehe issue #217 auf den ELMAH project site.

+2

Ich habe festgestellt, dass die Ausgabe # 217 im September 2012 behoben wurde. Gibt es Pläne, eine neue Version von Elmah zu veröffentlichen? –

+1

@AtifAziz PLUSONE! Bitte drücken, um zu nuget? Das wurde vor langer Zeit gepatcht ... Wenn das Problem ist, dass man Framework> = 4 braucht, könnte es vielleicht ein v4 nugget-Paket geben? –