У меня есть метод 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 и т. д..