ASP.NET DefaultBodyModelValidator 给出可枚举异常

ASP.NET DefaultBodyModelValidator giving enumerable exception

我们使用 ASP.NET webapi2 并在我们的模型中实现了很多 jsonconverter。

我们很少遇到异常情况,大约每月一次。 我们不在我们的模型上使用任何验证属性。 多次检查那里的代码后不确定是什么原因造成的。

有没有人遇到过类似的异常情况,有什么线索。

Collection was modified; enumeration operation may not execute.

at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource) at System.Collections.Generic.Dictionary2.Enumerator.MoveNext() at System.Web.Http.Validation.DefaultBodyModelValidator.ValidateElements(IEnumerable model, ValidationContext validationContext) at System.Web.Http.Validation.DefaultBodyModelValidator.ValidateNodeAndChildren(ModelMetadata metadata, ValidationContext validationContext, Object container, IEnumerable1 validators) at System.Web.Http.Validation.DefaultBodyModelValidator.ValidateProperties(ModelMetadata metadata, ValidationContext validationContext) at System.Web.Http.Validation.DefaultBodyModelValidator.ValidateNodeAndChildren(ModelMetadata metadata, ValidationContext validationContext, Object container, IEnumerable1 validators) at System.Web.Http.Validation.DefaultBodyModelValidator.ValidateProperties(ModelMetadata metadata, ValidationContext validationContext) at System.Web.Http.Validation.DefaultBodyModelValidator.ValidateNodeAndChildren(ModelMetadata metadata, ValidationContext validationContext, Object container, IEnumerable1 validators) at System.Web.Http.ModelBinding.FormatterParameterBinding.d__0.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Web.Http.Controllers.HttpActionBinding.d__0.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Web.Http.Controllers.ExceptionFilterResult.d__0.MoveNext()

是的,这个错误通常意味着你有一个清单,内容如下:

A
B
C

某些东西正在以某种方式将某些东西插入到列表中,导致列表被修改如下:

A
B
D
C

例如。枚举抛出异常,因为它识别出列表已被修改;这通常发生在 foreach 循环中。请参阅此 post 以获取更多信息:以 Collection was modified; enumeration operation may not execute in ArrayList 为例。使用 for 是一种绕过它的方法。

您是否自定义了模型绑定策略的任何部分?

我已禁用模型绑定模块。因为我们不需要它。为了避免这种异常。