2012-10-18 23 views
0

我有一個WebApi控制器,並添加了來自BreezeJs的過濾器以支持可查詢請求,如$ orderby = DateAdded & $ top = 8。如何在WebAPI MVC 4中使用BreezeJs進行分頁

GlobalConfiguration.Configuration.Filters.Add(
     new Breeze.WebApi.ODataActionFilter()); 

一切工作正常。這隻給出8個結果。我需要做什麼來添加總計數也會返回結果?

UPDATE

public class ODataHandler : DelegatingHandler 
    { 
     protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
     { 
      return base.SendAsync(request, cancellationToken).ContinueWith(
      task => 
      { 
       var response = task.Result; 

       if (ResponseIsValid(response) && ShouldInlineCount(request)) 
       { 
        object responseObject; 
        response.TryGetContentValue(out responseObject); 

        if (responseObject is IQueryable) 
        { 
         var renum = responseObject as IEnumerable<object>; 

         if (renum != null) 
         { 
          response = request.CreateResponse(HttpStatusCode.OK, new ODataMetadata<object>(renum, renum.Count())); 
         } 
        } 
       } 

       return response; 
      }); 
     } 
     private bool ShouldInlineCount(HttpRequestMessage request) 
     { 

     var queryParams = request.RequestUri.ParseQueryString(); 

     var inlinecount = queryParams["$inlinecount"]; 

     return string.Compare(inlinecount, "allpages", true) == 0; 

     } 

     private bool ResponseIsValid(HttpResponseMessage response) 
     { 
      if (response == null || response.StatusCode != HttpStatusCode.OK || !(response.Content is ObjectContent)) return false; 
      return true; 
     } 
    } 

這就是我想出了這麼遠。但問題是,在處理程序啓動之前,過濾器已經向請求中添加了TOP 8。因此,計數將是8而不是總數。

回答

3

優秀的問題。目前版本的Breeze中的OData支持不理解$inlinecount parameter for OData 2.0,我認爲這是你正在尋找的。它正在積壓。請投票認爲idea on the Breeze user voice

+0

我剛剛在他們的論壇上詢問同樣的事情。只需發佈代碼,可能需要添加5行以添加到ODataActionFilter –

+0

自v.0.75.1起支持$ inlinecount – Ward