asp.net-mvc – MVC动作过滤器集合已修改;枚举操作可能无法执行
|
我们在MVC 5.1.3应用程序中发生这个错误非常频繁,如果发生这种情况,用户必须刷新该页面,并且它会消失,所以它是间歇性的问题。 我们发现诊断似乎很难在框架本身内发生。任何想法在哪里看? 这是完整的堆栈: System.InvalidOperationException: Collection was modified; enumeration operation may not execute. at System.Collections.Generic.List`1.Enumerator.MoveNextRare() at System.Web.Mvc.FilterProviderCollection.GetFilters(ControllerContext controllerContext,ActionDescriptor actionDescriptor) at System.Web.Mvc.ControllerActionInvoker.GetFilters(ControllerContext controllerContext,ActionDescriptor actionDescriptor) at System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContext controllerContext,String actionName,AsyncCallback callback,Object state) at System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContext controllerContext,Object state) at System.Web.Mvc.Controller.<BeginExecuteCore>b__1c(AsyncCallback asyncCallback,Object asyncState,ExecuteCoreState innerState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallBeginDelegate(AsyncCallback callback,Object callbackState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.Begin(AsyncCallback callback,Object state,Int32 timeout) at System.Web.Mvc.Async.AsyncResultWrapper.Begin[TState](AsyncCallback callback,Object callbackState,BeginInvokeDelegate`1 beginDelegate,EndInvokeVoidDelegate`1 endDelegate,TState invokeState,Object tag,Int32 timeout,SynchronizationContext callbackSyncContext) at System.Web.Mvc.Controller.BeginExecuteCore(AsyncCallback callback,Object state) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.Begin(AsyncCallback callback,SynchronizationContext callbackSyncContext) at System.Web.Mvc.Controller.BeginExecute(RequestContext requestContext,Object state) at System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__4(AsyncCallback asyncCallback,ProcessRequestState innerState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallBeginDelegate(AsyncCallback callback,SynchronizationContext callbackSyncContext) at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext,Object state) at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean& completedSynchronously) 之前有一个类似的问题:Collection was modified; enumeration operation may not execute,但这是通过升级到MVC 5解决的,我们已经在5。 解决方法正如@Erik在评论中所说,显然,在执行请求期间,过滤器的集合被修改,在应用程序启动过程中应该只需要填充它们。一种可能性是您已经注册了一个定制的IFilterProvider,它打破了代码。这里是发生错误的源代码(来自FilterProviderCollection) for (int i = 0; i < providers.Length; i++)
{
IFilterProvider provider = providers[i];
foreach (Filter filter in provider.GetFilters(controllerContext,actionDescriptor))
{
filters.Add(filter);
}
}
provider.GetFilter(…)返回一个List,稍后在FilterProviderCollection的foreach块中枚举中进行修改。 这是我想到的测试: >首先,确保你没有注册一个自定义的IFilterProvider(你或者你可能正在使用的一个库)。如果是这样,那就是主要嫌犯。>在代码中查找GlobalFilterCollection和GlobalFilters类的所有用法。对此集合的任何修改只能从Global.asax中的Application_Start或启动类(如果您使用OWIN)>寻找您创建过滤器或访问它们的线索。>尝试升级到MVC 5.2。如果这是框架的一个问题(似乎不太可能),这可能会解决它。 (我使用5.2.2.0,在开发或生产中没有看到任何类似的问题)>调试您的应用程序,并在Application_BeginRequest和控制器操作的开头设置一个断点。尝试检查全局过滤器集合,看看是否有任何更改。>也许注册一个自定义IFilterProvider并通过调试或日志检查行为可能会有所帮助。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 如何从System.Web.HttpPostedFileBase转换为Sys
- asp.net-mvc-3 – ViewBag.Title错误
- 使用ASP.NET WebApi中的HttpClient异步读取分块内容
- asp.net-mvc – ASP.NET MVC Intellisense没有找到ViewData
- asp.net-mvc – 是否有一个ASP.NET MVC HtmlHelper的图像链
- asp.net-mvc – MVC DateTime验证失败
- asp.net-mvc – Elmah.MVC在IIS Express下工作但不是IIS 7.
- asp.net-mvc – 如何在视图中的脚本部分中包含脚本包
- asp.net-mvc – 如何每秒自动刷新MVC PartialView
- DELETE语句与ASP.NET动态数据中的REFERENCE约束冲突
- asp.net – HTTPModule BeginRequest应该是Respo
- asp.net-mvc – HttpPostedFileBase总是在ASP.NE
- asp.net-mvc – ValidationMessage – 处理同一属
- asp.net – Visual Studio 2015的项目模板
- 如何知道asp.net 3.5 sp1和asp.net mvc是否安装在
- asp.net – 授权属性中的UrlHelper和ViewContext
- 绘制图表到ASP.NET MVC 4(Razor,C#)网站
- asp.net-mvc – 启用/禁用每个控制器/操作方法的
- asp.net-mvc – 使用OWIN的Google身份验证Oauth在
- nuget-package – 如何创建和使用ASP.NET vNext类
