WebAPI PUT InsufficientExecutionStackException与DbGeography类型

时间:2015-01-16 08:11:42

标签: c# asp.net-web-api

在处理PUT调用时,WebAPI处理程序在验证模型时似乎会​​进入堆栈溢出类型的情况。异常并不清楚,并且没有迹象表明模型中的内容导致此验证类进入循环。附加调试器什么都不做。处理程序将永远不会被调用,序列化程序将正常反序列化已发布的json而不会发生意外。 可能出现什么问题?

以下代码在退出抛出异常“

之前循环几百次
  

堆栈不足以安全地继续执行程序。这个可以   因为在调用堆栈或函数上有太多函数而发生   堆栈使用了太多的堆栈空间。

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) 

该模型类似于这个简单的例子。该模型具有我可以确认的默认值全部初始化。该模型也没有自己的参考。

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

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

1 个答案:

答案 0 :(得分:9)

Exclude a type from model validation (example DbGeography) to avoid InsufficientExecutionStackException

中找到解决方案

此模型的其中一种类型是DbGeography。由于某种原因,默认的验证器会卡在此类型的循环中,枚举它的属性。验证器甚至不应该在那里,似乎是一个bug。但是可以使用自定义验证器设置忽略此类型来覆盖行为。