2012-12-30 133 views
1

這是我第一次嘗試使用breeze.js,所以我可能有不正確的設置,但不知道它是什麼。ODataActionFilter被調用兩次

執行簡單查詢時遇到錯誤。我在VS2012項目中首先使用EF 5.0 DB。

發生錯誤。 值不能爲空。參數名稱:源 System.ArgumentNullException 在System.Linq.Queryable.Where [TSource](IQueryable的1 source, Expression 1謂詞)在lambda_method(封閉,IQueryable的)在Breeze.WebApi.ODataActionFilter.OnActionExecuted(HttpActionExecutedContext actionExecutedContext)在的System.Web .Http.Filters.ActionFilterAttribute.CallOnActionExecuted(HttpActionContext actionContext,HttpResponseMessage響應,異常異常)在System.Web.Http.Filters.ActionFilterAttribute。 <> c_ DisplayClass2.b _0(HttpResponseMessage response)at System.Threading.Tasks.TaskHelpersExtensions。 <> c__DisplayClass41 2.<Then>b__40(Task1噸)在System.Threading.Tasks.TaskHelpersExtensions.ThenImpl [TTask,TOuterResult](TTask任務,Func`2延續,的CancellationToken的CancellationToken,布爾runSynchronously)

在試圖確定什麼我做錯了,我下載了breeze服務器的源代碼,並將該項目包含在解決方案中,以便我可以跟蹤錯誤。該錯誤發生在ODataActionFilter.cs中的OnActionExecuted事件中。奇怪的是,對於同一個查詢,該函數被調用兩次。該函數首先用responseObject中的查詢調用。第二次調用該事件時,查詢的結果位於responseObject中。這不再是導致錯誤的iQueryable對象。我無法確定爲什麼函數在第二次調用時已經具有正確的結果。

有沒有人看過這個之前,可以告訴我指向一個方向來解決它?

謝謝

+0

我已經看到了......但猜測你的原因是沒用的。如果您提供更多信息,我可能會提供幫助。你是怎麼到這裏來的?你是否從MVC 4 SPA模板開始[可能有問題]?或者其他一些模板?你安裝了哪個NuGet軟件包?你創建了自己的模型和控制器嗎?如果是這樣,什麼屬性(S)裝飾控制器? – Ward

+0

病房。在我發佈下面的答案之前,我沒有注意到您的回覆。儘管我沒有閱讀你的回覆就能解決它,但你的建議是正確的。我沒有在api控制器上使用必要的屬性。謝謝。 – tsdude

回答

1

我回答我自己的問題。

解決方法是我的api控制器沒有應用新的BreezeController屬性。這不在任何文檔中。但是,我確實在樣本中找到了它。

即從文檔 :http://www.breezejs.com/documentation/web-api-controller

[JsonFormatter, ODataActionFilter] 
public class TodosController : ApiController { 

但是,目前的樣品具有這樣的:

[BreezeController] 
public class TodosController : ApiController { 

這樣可以解決問題,但它是很難找到。我也不完全清楚新的BreezeController屬性是應該添加到原始的兩個屬性還是完全替換它們。