2015-01-16 19 views
6

處理PUT調用時,WebAPI處理程序在驗證模型時似乎進入堆棧溢出類型的情況。這個例外並不清楚,並且沒有跡象表明模型中導致這個驗證類進入循環。附加調試器不做任何事情。處理程序永遠不會被調用,序列化程序將正常地反序列化發佈的json,而不會發生任何事件。 什麼可能是錯的?WebAPI PUT InsufficientExecutionStackException和DbGeography類型

下面的代碼只是退出拋出異常」

不足堆繼續安全地執行程序前循環數百倍,這可以 從具有調用堆棧上有太多的功能發生或功能上 堆棧使用太多的堆棧空間。

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) 

模型類似於這個簡單的例子。該模型具有默認VAL我可以確認的所有都已初始化。該模型也沒有提及自身。在

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

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

回答

7

實測溶液:該模型Exclude a type from model validation (example DbGeography) to avoid InsufficientExecutionStackException

其中一種類型是DbGeography。由於某種原因,默認的驗證器被卡在枚舉屬性的枚舉類型的循環中。驗證器甚至不應該在那裏,似乎是一個錯誤。但是可以通過將自定義驗證器設置爲忽略此類型來將該行爲重新編排。

+0

哇。如果我沒有找到這個,我會失去幾天。感謝您拯救我。 –