Asp.net mvc 如何使用BreezeJs在WebAPI MVC 4中进行分页
我有一个WebApi控制器,并从BreezeJs添加了过滤器来支持可查询的请求,如$orderby=DateAdded&$top=8Asp.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
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