ODataActionFilter被调用两次

时间:2012-12-30 01:04:09

标签: breeze

这是我第一次尝试使用breeze.js,所以我可能设置错误,但不确定它是什么。

执行简单查询时遇到错误。我首先在VS2012项目中使用EF 5.0 DB。

发生了错误。 值不能为空。参数名称:source System.ArgumentNullException 在System.Web.Http.Filters.ActionFilterAttribute的Breeze.WebApi.ODataActionFilter.OnActionExecuted(HttpActionExecutedContext actionExecutedContext)的lambda_method(Closure,IQueryable)上的System.Linq.Queryable.Where [TSource](IQueryable 1 source, Expression 1谓词) System.Threading.Tasks上的System.Web.Http.Filters.ActionFilterAttribute。&lt;&gt; c_ DisplayClass2.b _0(HttpResponseMessage响应)中的.CallOnActionExecuted(HttpActionContext actionContext,HttpResponseMessage响应,异常异常)。 SystemHelpersExtensions。&lt;&gt; c__DisplayClass41 2.<Then>b__40(Task 1 t)在System.Threading.Tasks.TaskHelpersExtensions.ThenImpl [TTask,TOuterResult](TTask任务,Func`2 continuation,CancellationToken cancellationToken,Boolean runSynchronously)

为了确定我做错了什么,我下载了breeze服务器源代码并将该项目包含在解决方案中,以便我可以追踪错误。错误发生在ODataActionFilter.cs中的OnActionExecuted事件中。奇怪的是,对于同一个查询,该函数被调用两次。首先使用responseObject中的查询调用该函数。第二次调用事件时,查询的结果位于responseObject中。这不再是导致错误的iQueryable对象。我无法确定为什么函数在已经具有正确结果的情况下被第二次调用。

以前是否有人见过这个问题并且可以告诉我一个方向来解决它?

感谢

1 个答案:

答案 0 :(得分:1)

我正在回答我自己的问题。

解决方案是我的api控制器没有应用新的BreezeController属性。这不在任何文档中。但是,我确实在样本中找到了它。

即 来自文档:http://www.breezejs.com/documentation/web-api-controller

[JsonFormatter, ODataActionFilter]
public class TodosController : ApiController {

但是,目前的样本有:

[BreezeController]
public class TodosController : ApiController {

这解决了问题,但很难找到。我还不完全清楚是否应该将新的BreezeController属性添加到原始的两个属性中,或者它是否完全替换它们。