示例#1
0
        public static int GetMaxPageSize(IDictionary <String, StringValues> requestHeaders)
        {
            requestHeaders.TryGetValue("Prefer", out StringValues preferHeader);
            var headers = OeRequestHeaders.Parse(requestHeaders["Accept"], preferHeader);

            return(headers.MaxPageSize);
        }
示例#2
0
        public virtual async Task ExecuteResultAsync(ActionContext context)
        {
            var settings = new ODataMessageWriterSettings()
            {
                BaseUri = _odataUri.ServiceRoot,
                EnableMessageStreamDisposal = false,
                ODataUri    = _odataUri,
                Validations = ValidationKinds.ThrowIfTypeConflictsWithMetadata | ValidationKinds.ThrowOnDuplicatePropertyNames,
                Version     = ODataVersion.V4
            };

            var requestHeaders = OeRequestHeaders.Parse(context.HttpContext.Request.Headers["Accept"], context.HttpContext.Request.Headers["Prefer"]);

            if (requestHeaders.MaxPageSize > 0 && PageSize == 0)
            {
                PageSize = requestHeaders.MaxPageSize;
            }

            IODataResponseMessage responseMessage = new Infrastructure.OeInMemoryMessage(context.HttpContext.Response.Body, context.HttpContext.Request.ContentType);

            using (ODataMessageWriter messageWriter = new ODataMessageWriter(responseMessage, settings, _edmModel))
            {
                ODataUtils.SetHeadersForPayload(messageWriter, ODataPayloadKind.ResourceSet);

                IEdmEntityType entityType = _resultEntitySet.EntityType();
                ODataWriter    writer     = messageWriter.CreateODataResourceSetWriter(_resultEntitySet, entityType);
                await SerializeAsync(writer, requestHeaders.MetadataLevel);
            }
        }
        private static OeRequestHeaders GetRequestHeaders(HttpRequestHeaders requestHeaders, HttpResponse httpResponse)
        {
            ((IDictionary <String, StringValues>)requestHeaders).TryGetValue("Prefer", out StringValues preferHeader);
            var headers = OeRequestHeaders.Parse(requestHeaders.HeaderAccept, preferHeader);

            return(new OeHttpRequestHeaders(headers, httpResponse));
        }
        private async Task InvokeApi(HttpContext httpContext)
        {
            httpContext.Request.Headers.TryGetValue("Prefer", out StringValues preferHeader);
            OeRequestHeaders headers = OeRequestHeaders.Parse(httpContext.Request.Headers["Accept"], preferHeader);

            Uri baseUri    = UriHelper.GetBaseUri(httpContext.Request);
            Uri requestUri = UriHelper.GetUri(httpContext.Request);

            if (HttpMethods.IsGet(httpContext.Request.Method))
            {
                var parser = new OeParser(baseUri, EdmModel, GetModelBoundProvider(httpContext), OeParser.ServiceProvider);
                await parser.ExecuteGetAsync(requestUri, new OeHttpRequestHeaders(headers, httpContext.Response),
                                             httpContext.Response.Body, httpContext.RequestAborted).ConfigureAwait(false);
            }
            else if (HttpMethods.IsPost(httpContext.Request.Method) ||
                     HttpMethods.IsPut(httpContext.Request.Method) ||
                     HttpMethods.IsPatch(httpContext.Request.Method) ||
                     HttpMethods.IsDelete(httpContext.Request.Method))
            {
                ODataUri odataUri = OeParser.ParseUri(EdmModel, baseUri, requestUri, OeParser.ServiceProvider);
                if (odataUri.Path.LastSegment is OperationImportSegment)
                {
                    var parser = new OeParser(baseUri, EdmModel, GetModelBoundProvider(httpContext), OeParser.ServiceProvider);
                    await parser.ExecuteOperationAsync(odataUri, new OeHttpRequestHeaders(headers, httpContext.Response),
                                                       httpContext.Request.Body, httpContext.Response.Body, httpContext.RequestAborted).ConfigureAwait(false);
                }
                else
                {
                    httpContext.Response.ContentType = httpContext.Request.ContentType;
                    var batchParser = new OeBatchParser(baseUri, EdmModel, OeParser.ServiceProvider);
                    await batchParser.ExecuteOperationAsync(requestUri, httpContext.Request.Body, httpContext.Response.Body,
                                                            httpContext.Request.ContentType, httpContext.Request.Method, httpContext.RequestAborted).ConfigureAwait(false);
                }
            }
        }
示例#5
0
        public async Task <OdataWcfQuery> Get(OdataWcfQuery request)
        {
            OeRequestHeaders headers = OeRequestHeaders.Parse(request.ContentType, request.Prefer);

            headers.ResponseContentType = headers.ContentType;

            Query.OeModelBoundProvider modelBoundProvider = null;
            if (headers.MaxPageSize > 0)
            {
                var pageNextLinkModelBoundBuilder = new PageNextLinkModelBoundBuilder(_edmModel, false);
                modelBoundProvider = pageNextLinkModelBoundBuilder.BuildProvider(headers.MaxPageSize, false);
            }
            var parser = new OeParser(_baseUri, _edmModel, modelBoundProvider);

            String query          = new StreamReader(request.Content).ReadToEnd();
            var    uri            = new Uri(_baseUri, new Uri(query, UriKind.Relative));
            var    responseStream = new MemoryStream();

            await parser.ExecuteGetAsync(uri, headers, responseStream, CancellationToken.None);

            responseStream.Position = 0;
            return(new OdataWcfQuery()
            {
                Content = responseStream,
                ContentType = headers.ResponseContentType
            });
        }
示例#6
0
        private async Task InvokeApi(HttpContext httpContext)
        {
            httpContext.Request.Headers.TryGetValue("Prefer", out StringValues preferHeader);
            OeRequestHeaders headers = OeRequestHeaders.Parse(httpContext.Request.Headers["Accept"], preferHeader);

            var parser = new OeParser(UriHelper.GetBaseUri(httpContext.Request), EdmModel, GetModelBoundProvider(httpContext), OeParser.ServiceProvider);
            await parser.ExecuteGetAsync(UriHelper.GetUri(httpContext.Request), new OeHttpRequestHeaders(headers, httpContext.Response),
                                         httpContext.Response.Body, CancellationToken.None).ConfigureAwait(false);
        }
示例#7
0
        private async Task Invoke(HttpContext httpContext, PathString remaining)
        {
            var requestHeaders = (HttpRequestHeaders)httpContext.Request.Headers;

            ((IDictionary <String, StringValues>)requestHeaders).TryGetValue("Prefer", out StringValues preferHeader);
            OeRequestHeaders headers = OeRequestHeaders.Parse(requestHeaders.HeaderAccept, preferHeader);

            var parser = new OeParser(UriHelper.GetBaseUri(httpContext.Request), _edmModel);
            await parser.ExecuteGetAsync(UriHelper.GetUri(httpContext.Request), new OeHttpRequestHeaders(headers, httpContext.Response), httpContext.Response.Body, CancellationToken.None);
        }
示例#8
0
        private async Task Invoke(HttpContext httpContext, PathString remaining)
        {
            var requestHeaders = (FrameRequestHeaders)httpContext.Request.Headers;

            httpContext.Response.ContentType = requestHeaders.HeaderAccept;

            var uri = new Uri(_baseUri.OriginalString + remaining + httpContext.Request.QueryString);
            OeRequestHeaders headers = OeRequestHeaders.Parse(requestHeaders.HeaderAccept);
            var parser = new OeParser(_baseUri, _dataAdapter, _edmModel);
            await parser.ExecuteQueryAsync(uri, headers, httpContext.Response.Body, CancellationToken.None);
        }
示例#9
0
        private static OeRequestHeaders GetRequestHeaders(HttpRequestHeaders requestHeaders, HttpResponse httpResponse, bool navigationNextLink, int?maxPageSize)
        {
            ((IDictionary <String, StringValues>)requestHeaders).TryGetValue("Prefer", out StringValues preferHeader);
            var headers = OeRequestHeaders.Parse(requestHeaders.HeaderAccept, preferHeader).SetNavigationNextLink(navigationNextLink);

            if (maxPageSize != null)
            {
                headers = headers.SetMaxPageSize(maxPageSize.Value);
            }

            return(new OeHttpRequestHeaders(headers, httpResponse));
        }
示例#10
0
        public async Task <Stream> Get(string query, String acceptHeader)
        {
            OeRequestHeaders headers = OeRequestHeaders.Parse(acceptHeader);
            var parser = new OeParser(_baseUri, DataAdapter, _edmModel);

            var uri            = new Uri(_baseUri, new Uri(query, UriKind.Relative));
            var responseStream = new MemoryStream();
            await parser.ExecuteQueryAsync(uri, headers, responseStream, CancellationToken.None);

            responseStream.Position = 0;
            return(responseStream);
        }
示例#11
0
        public async Task <OdataWcfQuery> Get(OdataWcfQuery request)
        {
            OeRequestHeaders headers = OeRequestHeaders.Parse(request.ContentType, request.Prefer);

            headers.ResponseContentType = headers.ContentType;
            var parser = new OeParser(_baseUri, _edmModel);

            String query          = new StreamReader(request.Content).ReadToEnd();
            var    uri            = new Uri(_baseUri, new Uri(query, UriKind.Relative));
            var    responseStream = new MemoryStream();

            await parser.ExecuteGetAsync(uri, headers, responseStream, CancellationToken.None);

            responseStream.Position = 0;
            return(new OdataWcfQuery()
            {
                Content = responseStream,
                ContentType = headers.ResponseContentType
            });
        }
示例#12
0
        public async Task ExecuteResultAsync(ActionContext context)
        {
            var settings = new ODataMessageWriterSettings()
            {
                BaseUri = _odataUri.ServiceRoot,
                EnableMessageStreamDisposal = false,
                ODataUri    = _odataUri,
                Validations = ValidationKinds.ThrowIfTypeConflictsWithMetadata | ValidationKinds.ThrowOnDuplicatePropertyNames,
                Version     = ODataVersion.V4
            };

            var requestHeaders = OeRequestHeaders.Parse(context.HttpContext.Request.Headers["Accept"], context.HttpContext.Request.Headers["Prefer"]);

            _metadataLevel = requestHeaders.MetadataLevel;
            if (requestHeaders.MaxPageSize > 0 && PageSize == 0)
            {
                PageSize = requestHeaders.MaxPageSize;
            }

            IODataResponseMessage responseMessage = new OeInMemoryMessage(context.HttpContext.Response.Body, context.HttpContext.Request.ContentType);

            using (ODataMessageWriter messageWriter = new ODataMessageWriter(responseMessage, settings, _edmModel))
            {
                ODataUtils.SetHeadersForPayload(messageWriter, ODataPayloadKind.ResourceSet);

                IEdmEntitySet  edmEntitySet  = null;
                IEdmEntityType edmEntityType = null;
                foreach (IEdmEntitySet element in _edmModel.EntityContainer.EntitySets())
                {
                    edmEntityType = element.EntityType();
                    if (edmEntityType.FullName() == typeof(T).FullName)
                    {
                        edmEntitySet = element;
                        break;
                    }
                }

                ODataWriter writer = messageWriter.CreateODataResourceSetWriter(edmEntitySet, edmEntityType);
                await SerializeAsync(writer);
            }
        }