2012-07-02 50 views
1

可能重複:
OData pagination with WebApi ($inlinecount)實施的OData inlinecount使用asp.net的WebAPI

由於Asp.net的WebAPI幾乎支持OData的,它很誘人,我得到$ inlinecount工作,所以它與kendo ui(或任何其他)搭配很好。 因此,它返回JSONP格式值,我實現了一個新的MediaFormatter(從#1)。

麻煩的是,它需要的結果,具有計數元素在其中,以獲得服務器端分頁的工作,所以現在我砍死格式化得到一個假的計數工作。這一切都很好,並且網格都很開心,但是由於返回的IQueryable表達式已經應用了filters/Take等,因此獲得真正的計數是一個挑戰。

public override Task WriteToStreamAsync(Type type, object value, Stream stream, HttpContentHeaders contentHeaders, TransportContext transportContext) 
    { 
     string callback; 
     if (IsJsonpCountableRequest(out callback)) 
     { 
      return Task.Factory.StartNew(() => 
      { 
       var q = value as IQueryable<Movie>; 
       var count = q.Count(); // this count doesnt return the actual count 
       var writer = new StreamWriter(stream); 
       writer.Write(callback + "({"); 
       writer.Write(@"""d"""); 
       writer.Write(" : { "); 
       writer.Write(@"""results"""); 
       writer.Write(" : "); 
       writer.Flush(); 
       base.WriteToStreamAsync(type, value, stream, contentHeaders, transportContext).Wait(); 
       writer.Write(","); 
       writer.Write(@"""__count"""); 
       writer.Write(" : "); 

       writer.Write(string.Format(@"""{0}""", count)); 
       writer.Write("}"); 

       writer.Write("})"); 
       writer.Flush(); 
      }); 
     } 
     else 
     { 
      return base.WriteToStreamAsync(type, value, stream, contentHeaders, transportContext); 
     } 
    } 

有沒有一種方法分別獲得計數,可能是從的IQueryable的潛在供應商?

回答

0

的SPA DataController(其從ApiController得到)用於實現此功能。然而,隨着最新的變化,它已被刪除,因爲他們計劃以不同的方式支持OData。

如果你用MVC 4測試版的工作,那麼你就可以在你的控制器簡單地更改爲DataController,和你設置。如果您使用的是RC,那麼您應該查看Codeplex上較舊的ASP.NET Webstack commit。你感興趣的方法是ExecuteAsync,從DataController.cs

+0

看到類似的問題http://stackoverflow.com/questions/10706479/odata-pagination-with-webapi-inlinecount –

2

我上週有確切的問題。退房Extending your ASP.NET Web API responses with useful metadata

我用這篇文章和示例代碼來獲得尋呼網和使用的OData運行。如示例中詳細描述的,我創建了一個委派處理程序來捕獲HttpResponseMessage並將其包含在包含項目計數的自定義元數據中。自定義屬性CustomQueryableAttribute也被創建,它繼承了默認的QueryableAttribute。

這聽起來有點複雜,但實際上很簡單。我在30分鐘左右就開始跑步了。

希望未來版本的Web API具有更完整的OData支持。

編輯:OData的支持不會與Web API出貨。正在爲RTM版本刪除可查詢屬性。通過單獨的Nuget軟件包進行初始化後,有時會提供更完整的OData支持。

+0

請參閱[其他答案](http://stackoverflow.com/a/12091786/11635) –

+0

在移動這個答案QI你的任何機會,引爲DUP和VTCing(假設您同意的),我會給予好評在那裏?(如果你不同意我可以刪除評論) –

+0

後移動到後移動到http://stackoverflow.com/questions/10706479 – Mark