WebAPI PUT InsufficientExecutionStackException与DbGeography类型

sim*_*olo 7 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) 
Run Code Online (Sandbox Code Playgroud)

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

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

  [Required]
  public CustomEnumType myEnum {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

sim*_*olo 9

找到解决方案:从模型验证中排除类型(示例DbGeography)以避免InsufficientExecutionStackException

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