Im пытается написать общий PageResult
, который я добавил к базовому контроллеру.Использование PageResult в базе ApiController возвращает System.ArgumentNullException
[EnableQuery]
[HttpGet]
[Route(""]
public virtual PageResult<TListModel> Get(ODataQueryOptions<TListModel> options)
{
ODataQuerySettings settings = new ODataQuerySettings()
{
PageSize = 25,
};
IQueryable results = options.ApplyTo(DomainService.GetQueryable(), settings);
var items = results as IQueryable<TListModel>;
// return new PageResult<TListModel>(items, Request.ODataProperties().NextLink,DomainService.GetQueryable().Count());
return new PageResult<TListModel>(items, Request.ODataProperties().NextLink, Request.ODataProperties().TotalCount);
}
Теперь, когда я пытаюсь позвонить АНИ ENDPOINT
/endpoint?$select=Title
Я получаю сообщение об ошибке
Значение не может быть пустым \ \ Имя параметра:. Источник
Если Я удаляю ?$select=Title
Я могу вызвать api, и результаты будут возвращены.
Есть ли что-то еще, что я должен сделать, чтобы включить это? Источник имени параметра ... Я понятия не имею, что это такое?
Полный StackTrace
"в System.Linq.Queryable.Count [TSource] (IQueryable
1 source)\ \ at Api.EndPoints.BaseController
5.Получить (ODataQueryOptions1 options) in e:\\@Source\\Web\\Api\\.EndPoints\\BaseController.cs:line 62\ \ at lambda_method(Closure , Object , Object[])\ \ at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.<GetExecutor>b__9(Object instance, Object[] methodParameters)\ \ at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)\ \ at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary
2 аргументы, CancellationToken CancellationToken) \ \ --- Конец трассировки стека из предыдущее место, где было выбрано исключение --- \ \ at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача задачи) \ \ at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (задача задачи) \ \ в System.Runtime.CompilerServices. TaskAwaiter1.GetResult()\ \ at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__0.MoveNext()\ \ --- End of stack trace from previous location where exception was thrown ---\ \ at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\ \ at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\ \ at System.Runtime.CompilerServices.TaskAwaiter
1.GetResult() \ \ at System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext() \ \ --- Конец трассировки стека из предыдущего места, где исключение было t hrown --- \ \ at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() \ \ at System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext() \ \ --- Конец трассировки стека из предыдущего места, где исключение был брошен --- \ \ в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача задачи) \ \ at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (задача задачи) \ \ at System.Runtime.CompilerServices.TaskAwaiter1.GetResult()\ \ at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__0.MoveNext()\ \ --- End of stack trace from previous location where exception was thrown ---\ \ at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\ \ at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\ \ at System.Runtime.CompilerServices.TaskAwaiter
1. GetResult() \ \ at System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext() \ \ --- Конец трассировки стека из предыдущего места, где было выбрано исключение - \ \ at System.Runtime.CompilerServices.TaskAwaiter .ThrowForNonSuccess (задача задачи) \ \ at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (задача задачи) \ \ в System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() \ \ at System.Web.Http.Dispatcher.HttpControllerDispatcher .d__1.MoveNext() "
Это потому, что после метода ApplyTo результаты не относятся к типу IQueryable, а представляют собой частичную коллекцию проектов TListModel. –
Karata