2012-10-18 2 views
0

WebApi 컨트롤러를 사용하고 BreezeJs의 필터를 추가하여 $ orderby = DateAdded & $ top = 8과 같은 쿼리 가능한 요청을 지원합니다.WebAPI에서 페이징을 수행하는 방법 BreezeJs를 사용하여 MVC 4

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

방금 ​​포럼에서 같은 질문을했습니다. 코드 오버런을 막기 위해 ODataActionFilter에 추가 할 5 행을 –

+0

$ inlinecount로 v.0.75.1부터 지원합니다. – Ward