public async Task TestTakeIncludeTotalCount() { using (HttpConfiguration config = new HttpConfiguration()) { using (HttpServer server = new HttpServer(config)) { WebApiConfig.RegisterNorthwind(config, server); var request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/api/test"); request.SetConfiguration(config); var api = request.CreateRequestContainer("NorthwindApi").GetService<ApiBase>(); QueryResult result = await api.QueryAsync( new QueryRequest(api.GetQueryableSource<Order>("Orders").OrderBy(o => o.OrderDate).Take(10))); var orderResults = result.Results.OfType<Order>(); Assert.Equal(10, orderResults.Count()); } } }
/// <summary> /// Asynchronously parses the batch requests. /// </summary> /// <param name="request">The HTTP request that contains the batch requests.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>The task object that represents this asynchronous operation.</returns> public override async Task<IList<ODataBatchRequestItem>> ParseBatchRequestsAsync( HttpRequestMessage request, CancellationToken cancellationToken) { Ensure.NotNull(request, "request"); IServiceProvider requestContainer = request.CreateRequestContainer(ODataRouteName); requestContainer.GetRequiredService<ODataMessageReaderSettings>().BaseUri = GetBaseUri(request); ODataMessageReader reader = await request.Content.GetODataMessageReaderAsync(requestContainer, cancellationToken); request.RegisterForDispose(reader); List<ODataBatchRequestItem> requests = new List<ODataBatchRequestItem>(); ODataBatchReader batchReader = reader.CreateODataBatchReader(); Guid batchId = Guid.NewGuid(); while (batchReader.Read()) { if (batchReader.State == ODataBatchReaderState.ChangesetStart) { IList<HttpRequestMessage> changeSetRequests = await batchReader.ReadChangeSetRequestAsync(batchId, cancellationToken); foreach (HttpRequestMessage changeSetRequest in changeSetRequests) { changeSetRequest.CopyBatchRequestProperties(request); changeSetRequest.DeleteRequestContainer(false); } requests.Add(this.CreateRestierBatchChangeSetRequestItem(changeSetRequests)); } else if (batchReader.State == ODataBatchReaderState.Operation) { HttpRequestMessage operationRequest = await batchReader.ReadOperationRequestAsync( batchId, true, cancellationToken); operationRequest.CopyBatchRequestProperties(request); operationRequest.DeleteRequestContainer(false); requests.Add(new OperationRequestItem(operationRequest)); } } return requests; }
private static HttpRequestMessage CreateHttpRequestMessage(HttpActionDescriptor actionDescriptor, ODataRoute oDataRoute, HttpConfiguration httpConfig) { Contract.Requires(httpConfig != null); Contract.Requires(oDataRoute != null); Contract.Requires(httpConfig != null); Contract.Ensures(Contract.Result<HttpRequestMessage>() != null); Contract.Assume(oDataRoute.Constraints != null); var httpRequestMessage = new HttpRequestMessage(actionDescriptor.SupportedHttpMethods.First(), "http://any/"); var requestContext = new HttpRequestContext { Configuration = httpConfig }; httpRequestMessage.SetConfiguration(httpConfig); httpRequestMessage.SetRequestContext(requestContext); var httpRequestMessageProperties = httpRequestMessage.ODataProperties(); Contract.Assume(httpRequestMessageProperties != null); httpRequestMessage.CreateRequestContainer(oDataRoute.PathRouteConstraint.RouteName); return httpRequestMessage; }