在处理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;}
}
答案 0 :(得分:9)
此模型的其中一种类型是DbGeography
。由于某种原因,默认的验证器会卡在此类型的循环中,枚举它的属性。验证器甚至不应该在那里,似乎是一个bug。但是可以使用自定义验证器设置忽略此类型来覆盖行为。