web api内部错误500

web api内部错误500,web,asp.net-web-api,Web,Asp.net Web Api,我使用的是laatest版本的web api。 我返回了一个IQuerable值,得到了以下错误: iisexpress.exe Error: 0 : Operation=QueryableAttribute.ActionExecuted, Status=200 (OK), Exception=System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary. a

我使用的是laatest版本的web api。 我返回了一个
IQuerable
值,得到了以下错误:

iisexpress.exe Error: 0 : Operation=QueryableAttribute.ActionExecuted, Status=200 (OK), Exception=System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
   at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
   at System.Web.Http.OData.Builder.EdmTypeBuilder.CreateStructuralTypeBody(EdmStructuredType type, IStructuralTypeConfiguration config)
   at System.Web.Http.OData.Builder.EdmTypeBuilder.CreateEntityTypeBody(EdmEntityType type, IEntityTypeConfiguration config)
   at System.Web.Http.OData.Builder.EdmTypeBuilder.CreateEdmTypeBody(IStructuralTypeConfiguration config)
   at System.Web.Http.OData.Builder.EdmTypeBuilder.<GetEdmTypes>d__0.MoveNext()
   at System.Linq.Enumerable.<OfTypeIterator>d__aa`1.MoveNext()
   at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   at System.Linq.Enumerable.ToDictionary[TSource,TKey](IEnumerable`1 source, Func`2 keySelector)
   at System.Web.Http.OData.Builder.EdmModelHelperMethods.BuildEdmModel(String containerNamespace, String containerName, IEnumerable`1 entityTypeConfigurations, IEnumerable`1 entitySetConfigurations)
   at System.Web.Http.OData.Builder.ODataModelBuilder.GetEdmModel()
   at System.Web.Http.OData.Builder.ODataConventionModelBuilder.GetEdmModel()
   at System.Web.Http.HttpActionDescriptorExtensions.<>c__DisplayClass1.<GetEdmModel>b__0(Object _)
   at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
   at System.Web.Http.HttpActionDescriptorExtensions.GetEdmModel(HttpActionDescriptor actionDescriptor, Type entityClrType)
   at System.Web.Http.QueryableAttribute.OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
   at System.Web.Http.Tracing.Tracers.ActionFilterAttributeTracer.<>c__DisplayClass4.<OnActionExecuted>b__1()
   at System.Web.Http.Tracing.ITraceWriterExtensions.TraceBeginEnd(ITraceWriter traceWriter, HttpRequestMessage request, String category, TraceLevel level, String operatorName, String operationName, Action`1 beginTrace, Action execute, Action`1 endTrace, Action`1 errorTrace)
iisexpress.exe Error: 0 : Operation=InteractionDataController.ExecuteAsync, Exception=System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
   at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
   at System.Web.Http.OData.Builder.EdmTypeBuilder.CreateStructuralTypeBody(EdmStructuredType type, IStructuralTypeConfiguration config)
   at System.Web.Http.OData.Builder.EdmTypeBuilder.CreateEntityTypeBody(EdmEntityType type, IEntityTypeConfiguration config)
   at System.Web.Http.OData.Builder.EdmTypeBuilder.CreateEdmTypeBody(IStructuralTypeConfiguration config)
   at System.Web.Http.OData.Builder.EdmTypeBuilder.<GetEdmTypes>d__0.MoveNext()
   at System.Linq.Enumerable.<OfTypeIterator>d__aa`1.MoveNext()
   at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   at System.Linq.Enumerable.ToDictionary[TSource,TKey](IEnumerable`1 source, Func`2 keySelector)
   at System.Web.Http.OData.Builder.EdmModelHelperMethods.BuildEdmModel(String containerNamespace, String containerName, IEnumerable`1 entityTypeConfigurations, IEnumerable`1 entitySetConfigurations)
   at System.Web.Http.OData.Builder.ODataModelBuilder.GetEdmModel()
   at System.Web.Http.OData.Builder.ODataConventionModelBuilder.GetEdmModel()
   at System.Web.Http.HttpActionDescriptorExtensions.<>c__DisplayClass1.<GetEdmModel>b__0(Object _)
   at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
   at System.Web.Http.HttpActionDescriptorExtensions.GetEdmModel(HttpActionDescriptor actionDescriptor, Type entityClrType)
   at System.Web.Http.QueryableAttribute.OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
   at System.Web.Http.Tracing.Tracers.ActionFilterAttributeTracer.<>c__DisplayClass4.<OnActionExecuted>b__1()
   at System.Web.Http.Tracing.ITraceWriterExtensions.TraceBeginEnd(ITraceWriter traceWriter, HttpRequestMessage request, String category, TraceLevel level, String operatorName, String operationName, Action`1 beginTrace, Action execute, Action`1 endTrace, Action`1 errorTrace)
   at System.Web.Http.Tracing.Tracers.ActionFilterAttributeTracer.OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
   at System.Web.Http.Filters.ActionFilterAttribute.CallOnActionExecuted(HttpActionContext actionContext, HttpResponseMessage response, Exception exception)
   at System.Web.Http.Filters.ActionFilterAttribute.<>c__DisplayClass2.<System.Web.Http.Filters.IActionFilter.ExecuteActionFilterAsync>b__0(HttpResponseMessage response)
   at System.Threading.Tasks.TaskHelpersExtensions.<>c__DisplayClass41`2.<Then>b__40(Task`1 t)
   at System.Threading.Tasks.TaskHelpersExtensions.ThenImpl[TTask,TOuterResult](TTask task, Func`2 continuation, CancellationToken cancellationToken, Boolean runSynchronously)
iisexpress.exe错误:0:Operation=QueryableAttribute.ActionExecuted,Status=200(正常),Exception=System.Collections.Generic.KeyNotFoundException:字典中不存在给定的键。
在System.Collections.Generic.Dictionary`2.get_项(TKey)
在System.Web.Http.OData.Builder.EdmTypeBuilder.CreateStructureTypeBody(EdmStructuredType类型,IsStructuralTypeConfiguration配置)中
在System.Web.Http.OData.Builder.EdmTypeBuilder.CreateEntityTypeBody(EdmEntityType,IEntityTypeConfiguration配置)中
在System.Web.Http.OData.Builder.EdmTypeBuilder.CreateEdmTypeBody(ISStructuralTypeConfiguration配置)中
在System.Web.Http.OData.Builder.EdmTypeBuilder.d_u0.MoveNext()中
在System.Linq.Enumerable.d_uaa`1.MoveNext()中
在System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1源,Func`2键选择器,Func`2元素选择器,IEqualityComparer`1比较器)
在System.Linq.Enumerable.ToDictionary[TSource,TKey](IEnumerable`1 source,Func`2 keySelector)
在System.Web.Http.OData.Builder.EdmModelHelperMethods.BuildEdmModel(String ContainerNames,String containerName,IEnumerable`1 entityTypeConfigurations,IEnumerable`1 entitySetConfigurations)
在System.Web.Http.OData.Builder.ODataModelBuilder.GetEdmModel()上
位于System.Web.Http.OData.Builder.ODataConventionModelBuilder.GetEdmModel()处
在System.Web.Http.HttpActionDescriptor.c_uuDisplayClass1.b_uuu0(对象uu0)中
位于System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey,Func`2 valueFactory)
在System.Web.Http.HttpActionDescriptor.GetedModel(HttpActionDescriptor actionDescriptor,类型entityClrType)中
位于System.Web.Http.QueryableAttribute.OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
在System.Web.Http.Tracing.Tracers.ActionFilterAttributeString.c__DisplayClass4.b__1()中
在System.Web.Http.Tracing.ITraceWriterExtensions.TraceEnginend(ITraceWriter traceWriter、HttpRequestMessage请求、字符串类别、TraceLevel、字符串运算符名称、字符串运算符名称、操作'1 BeginCe、操作执行、操作'1 endTrace、操作'1 errorTrace)
iisexpress.exe错误:0:Operation=InteractionDataController.ExecuteAsync,Exception=System.Collections.Generic.KeyNotFoundException:字典中不存在给定的键。
在System.Collections.Generic.Dictionary`2.get_项(TKey)
在System.Web.Http.OData.Builder.EdmTypeBuilder.CreateStructureTypeBody(EdmStructuredType类型,IsStructuralTypeConfiguration配置)中
在System.Web.Http.OData.Builder.EdmTypeBuilder.CreateEntityTypeBody(EdmEntityType,IEntityTypeConfiguration配置)中
在System.Web.Http.OData.Builder.EdmTypeBuilder.CreateEdmTypeBody(ISStructuralTypeConfiguration配置)中
在System.Web.Http.OData.Builder.EdmTypeBuilder.d_u0.MoveNext()中
在System.Linq.Enumerable.d_uaa`1.MoveNext()中
在System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1源,Func`2键选择器,Func`2元素选择器,IEqualityComparer`1比较器)
在System.Linq.Enumerable.ToDictionary[TSource,TKey](IEnumerable`1 source,Func`2 keySelector)
在System.Web.Http.OData.Builder.EdmModelHelperMethods.BuildEdmModel(String ContainerNames,String containerName,IEnumerable`1 entityTypeConfigurations,IEnumerable`1 entitySetConfigurations)
在System.Web.Http.OData.Builder.ODataModelBuilder.GetEdmModel()上
位于System.Web.Http.OData.Builder.ODataConventionModelBuilder.GetEdmModel()处
在System.Web.Http.HttpActionDescriptor.c_uuDisplayClass1.b_uuu0(对象uu0)中
位于System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey,Func`2 valueFactory)
在System.Web.Http.HttpActionDescriptor.GetedModel(HttpActionDescriptor actionDescriptor,类型entityClrType)中
位于System.Web.Http.QueryableAttribute.OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
在System.Web.Http.Tracing.Tracers.ActionFilterAttributeString.c__DisplayClass4.b__1()中
在System.Web.Http.Tracing.ITraceWriterExtensions.TraceEnginend(ITraceWriter traceWriter、HttpRequestMessage请求、字符串类别、TraceLevel、字符串运算符名称、字符串运算符名称、操作'1 BeginCe、操作执行、操作'1 endTrace、操作'1 errorTrace)
位于System.Web.Http.Tracing.Tracers.ActionFilterAttributeCarter.OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
在System.Web.Http.Filters.ActionFilterAttribute.CallOnActionExecuted(HttpActionContext actionContext,HttpResponseMessage响应,异常)
在System.Web.Http.Filters.ActionFilterAttribute.c__DisplayClass2.b__0上(HttpResponseMessage响应)
在System.Threading.Tasks.TaskHelperExtensions.c__中显示Class41`2.b__40(Task`1t)
在System.Threading.Tasks.TaskHelperExtensions.TheInImpl[TTask,TouteResult](TTask任务,Func`2 continuation,CancellationToken CancellationToken,Boolean runSynchronously)

有人能解释一下问题出在哪里吗?

我也犯了同样的错误。我追溯到ODataModelBuilder调用GetEdmModel()的时候。我正在使用ODataConventionModelBuilder并声明EntitySets来创建我的模型。在我的例子中,我有一个带有子集合的父类。我尝试了不同类型的集合,IList、List、ICollection、IEnumerable,但仍然出现了这个错误。我知道这不是最好的解决方案,但我将子集合声明为对象。我使用Linq将集合指定为IEnumerable。我会继续调查,但至少我可以继续我的项目。我必须继续研究ODataConventionModelBuilder。我希望这至少为你指明了正确的方向


-Jason

这似乎是WebApi.OData包(0.1.0-alpha-120815)中的一个已知问题。你找到答案了吗?