2015-01-16 7 views
6

Bei der Verarbeitung eines PUT-Aufrufs scheint ein WebAPI-Handler bei der Validierung des Modells in eine Stapelüberlaufsituation zu geraten. Die Ausnahme ist nicht klar und es gibt keinen Hinweis darauf, was im Modell diese Validierungsklasse veranlasst, in eine Schleife zu gehen. Das Anhängen des Debuggers macht nichts. Der Handler wird niemals aufgerufen, der Serializer wird den geposteten JSON normalerweise ohne Vorfall deserialisieren. Was könnte falsch sein?WebAPI PUT InsufficientExecutionStackException mit DbGeography Typ

Der gerade folgende Code „

Unzureichende Stapel fortzusetzen Ausführung des Programms sicher die Ausnahme mehr hundert Mal vor dem Verlassen Schleifen zu werfen. Diese passieren zu viele Funktionen auf dem Call-Stack aus mit oder Funktion der Stapel zu viel Stack-Speicher verwenden.

at System.Runtime.CompilerServices.RuntimeHelpers.EnsureSufficientExecutionStack() 
at System.Web.Http.Validation.DefaultBodyModelValidator.ValidateNodeAndChildren(ModelMetadata metadata, ValidationContext validationContext, Object container, IEnumerable`1 validators) 
at System.Web.Http.Validation.DefaultBodyModelValidator.ValidateProperties(ModelMetadata metadata, ValidationContext validationContext) 

das Modell ist vergleichbar mit diesem einfachen Beispiel. das Modell verfügt über Standard-val Alle, die ich bestätigen kann, sind alle initialisiert. Das Modell hat auch keine Referenzen auf sich selbst.

public class Example { 
    [Required] 
    public string test {get; set;} 

    [Required] 
    public CustomEnumType myEnum {get; set;} 
} 

Antwort

7

Gefunden Lösung in: Exclude a type from model validation (example DbGeography) to avoid InsufficientExecutionStackException

Einer der Typen auf diesem Modell ist DbGeography. Der Standard-Validierer bleibt aus irgendeinem Grund in einer Schleife innerhalb dieses Typs stecken, die seine Eigenschaften auflistet. Der Validator sollte nicht einmal da drin sein und scheint ein Bug zu sein. Das Verhalten kann jedoch mit einem benutzerdefinierten Validator-Set überschrieben werden, um diesen Typ zu ignorieren.

+0

Wow. Wenn ich das nicht gefunden hätte, hätte ich Tage verloren. Danke, dass du mich gerettet hast. –

Verwandte Themen