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而不是總數。
我剛剛在他們的論壇上詢問同樣的事情。只需發佈代碼,可能需要添加5行以添加到ODataActionFilter –
自v.0.75.1起支持$ inlinecount – Ward