【问题标题】:WebAPI PUT InsufficientExecutionStackException with DbGeography TypeWebAPI PUT InsufficientExecutionStackException 与 DbGeography 类型
【发布时间】:2016-08-30 21:47:38
【问题描述】:

在处理 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;}
}

【问题讨论】:

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


    【解决方案1】:

    找到解决方案:Exclude a type from model validation (example DbGeography) to avoid InsufficientExecutionStackException

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

    【讨论】:

    • 哇。如果我没有找到这个,我会失去很多天。谢谢你救了我。
    • @simbolo 非常感谢!!!!半天过去了,但你节省了很多。
    猜你喜欢
    • 1970-01-01
    • 2011-07-26
    • 2016-03-28
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    相关资源
    最近更新 更多