Asp.net mvc 如何使用BreezeJs在WebAPI MVC 4中进行分页

Asp.net mvc 如何使用BreezeJs在WebAPI MVC 4中进行分页,asp.net-mvc,asp.net-mvc-4,asp.net-web-api,breeze,Asp.net Mvc,Asp.net Mvc 4,Asp.net Web Api,Breeze,我有一个WebApi控制器,并从BreezeJs添加了过滤器来支持可查询的请求,如$orderby=DateAdded&$top=8 GlobalConfiguration.Configuration.Filters.Add( new Breeze.WebApi.ODataActionFilter()); 一切正常。这只给出了8个结果。我需要做些什么才能添加这样的总数,并返回结果 更新 public class ODataHandler : DelegatingHandler

我有一个WebApi控制器,并从BreezeJs添加了过滤器来支持可查询的请求,如$orderby=DateAdded&$top=8

  GlobalConfiguration.Configuration.Filters.Add(
      new Breeze.WebApi.ODataActionFilter());
一切正常。这只给出了8个结果。我需要做些什么才能添加这样的总数,并返回结果

更新

 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;
      }
  }
public类ODataHandler:DelegatingHandler
{
受保护的覆盖任务SendAsync(HttpRequestMessage请求,CancellationToken CancellationToken)
{
return base.sendaync(请求,取消令牌)。ContinueWith(
任务=>
{
var response=task.Result;
if(响应有效(响应)和应线性计数(请求))
{
对象响应对象;
response.TryGetContentValue(out responseObject);
if(responseObject是可查询的)
{
var renum=作为IEnumerable的responseObject;
如果(renum!=null)
{
response=request.CreateResponse(HttpStatusCode.OK,新的ODataMetadata(renum,renum.Count());
}
}
}
返回响应;
});
}
私有bool shouldinline计数(HttpRequestMessage请求)
{
var queryParams=request.RequestUri.ParseQueryString();
var inlinecount=queryParams[“$inlinecount”];
返回string.Compare(inlinecount,“allpages”,true)=0;
}
私有布尔响应有效(HttpResponseMessage响应)
{
如果(response==null | | response.StatusCode!=HttpStatusCode.OK | |!(response.Content为ObjectContent))返回false;
返回true;
}
}

这就是我到目前为止想到的。但问题是,在处理程序启动之前,过滤器已经将前8名添加到请求中。所以计数是8,而不是总数。

好问题。Breeze当前版本中的OData支持不理解您所需要的。这是积压工作。请投赞成票。

好问题。Breeze当前版本中的OData支持不理解您所需要的。这是积压工作。请投赞成票。

我刚刚在他们的论坛上要求同样的东西。只需在代码上发泄一下,可能需要在ODataActionFilter中添加5行代码。从v.0.75.1I开始,他们就支持$inlinecount。我刚刚在他们的论坛上提出了同样的要求。只需在代码上发泄一下,从v.0.75.1开始,可能需要在ODataActionFilter中添加5行代码$inlinecount