2015-01-16 13 views
6

Quando si gestisce una chiamata PUT, un gestore WebAPI sembra andare in una situazione di tipo di overflow dello stack durante la convalida del modello. L'eccezione non è chiara e non vi è alcuna indicazione su cosa nel modello stia causando questa classe di validazione in un ciclo. L'associazione del debugger non fa nulla. Il gestore non verrà mai chiamato, il serializzatore deserializzerà il jSON inviato normalmente senza incidenti. Cosa potrebbe esserci di sbagliato?WebAPI PUT InsufficientExecutionStackException con DbGeography Tipo

Il codice seguente viene ripetuto solo diverse centinaia di volte prima di uscire lanciare l'eccezione"

pila insufficiente per continuare l'esecuzione del programma di sicurezza. Questo può succedere di avere troppe funzioni nello stack di chiamata o funzionare su lo stack di usare troppo spazio di stack.

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) 

il modello è simile a questo semplice esempio. il modello ha di default val quelli che posso confermare sono tutti inizializzati. Anche il modello non ha riferimenti a se stesso.

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

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

risposta

7

soluzione Trovato in: Exclude a type from model validation (example DbGeography) to avoid InsufficientExecutionStackException

Uno dei tipi su questo modello è DbGeography. Il validatore predefinito per qualche motivo rimane bloccato in un ciclo all'interno di questo tipo enumerando le sue proprietà. Il validatore non dovrebbe nemmeno essere lì e sembra essere un bug. Ma il comportamento può essere sovrascritto con un set di validatori personalizzati per ignorare questo tipo.

+0

Wow. Se non avessi trovato questo avrei perso giorni. Grazie per avermi salvato. –