Возвращает IQueryable, но для вставки заголовка TotalResults нужна статистика Raven.

У меня есть метод WebApi, который возвращает IQueryable документов RavenDB. Вызывающий должен знать количество возможныхрезультатов (поскольку фактические результаты ограничены/выгружаются).

Итак, у меня есть что-то вроде этого в конце моего метода WebApi:

HttpContext.Current.Response.AddHeader("Total-Result-Count", 
    resultsStats.TotalResults.ToString())

К сожалению, это не сработает, потому что IQueryable фактически еще не выполнен, поэтому статистика будет пустой.

Как отложитьзаполнение заголовка ответа статистики до тех пор, пока запрос не будет выполнен?

[ОБНОВЛЕНИЕ]

Я попытался применить ActionFilter для захвата результата после выполнения действия контроллера... но, похоже, ActionFilter вызывается ДО того, как IQueryable фактически перечисляется...

public class CountQueryableResultsActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuted(HttpActionExecutedContext filterContext)
    {
        var controllerStats = filterContext.ActionContext.ControllerContext.Controller as IControllerStatistics;
        System.Web.HttpContext.Current.Response.AddHeader("Total-Result-Count", controllerStats.TotalResults.ToString());
    }
}

ЕСЛИ, я называется «IQueryable.ToArray()» в конце метода WebApi, тогда запрос Linq выполняется немедленно, он генерирует статистику, и все работает, но это не позволит пользователю применять свои собственные фильтры OData и т. д..

6
задан Adam 11 May 2012 в 02:02
поделиться