Ejemplo n.º 1
0
        protected QueryExpression ResolveExpressionAndGetResponse(QueryExpression expression, out Contracts.OData.ODataRequest request, out Contracts.OData.ODataResponse response)
        {
            ExceptionUtilities.CheckArgumentNotNull(expression, "expression");
            ExceptionUtilities.CheckAllRequiredDependencies(this);

            expression = this.QueryResolver.Resolve(expression);

            var uri = this.ProtocolTestServices.QueryToUriConverter.GenerateUriFromQuery(expression, this.ServiceRoot);

            var headers = new HttpHeaderCollection();

            headers.Accept = DetermineAcceptType(uri, this.DefaultAcceptType);

            if (this.DataServiceVersion != DataServiceProtocolVersion.Unspecified)
            {
                headers.DataServiceVersion = this.DataServiceVersion.ConvertToHeaderFormat();
            }

            if (this.MaxDataServiceVersion != DataServiceProtocolVersion.Unspecified)
            {
                headers.MaxDataServiceVersion = this.MaxDataServiceVersion.ConvertToHeaderFormat();
            }

            SetupProtocolRequest(expression, this.ProtocolTestServices.RequestManager, this.QueryToODataPayloadConverter, uri, headers, this.GetActionContentType(), out request);

            response = this.GetResponse(expression, request);
            return(expression);
        }
Ejemplo n.º 2
0
        internal static void SetupProtocolRequest(QueryExpression expression, IODataRequestManager requestManager, IQueryToODataPayloadConverter queryToPayloadConverter, ODataUri uri, HttpHeaderCollection headers, string actionContentType, out Contracts.OData.ODataRequest request)
        {
            HttpVerb requestVerb = HttpVerb.Get;

            if (uri.IsAction())
            {
                requestVerb = HttpVerb.Post;
            }

            if (uri.IsWebInvokeServiceOperation())
            {
                requestVerb = HttpVerb.Post;
            }

            request = requestManager.BuildRequest(uri, requestVerb, headers);
            if (uri.IsAction())
            {
                var procedurePayload = queryToPayloadConverter.ComputePayload(expression) as ComplexInstance;

                if (procedurePayload != null)
                {
                    request.Headers.Add(HttpHeaders.ContentType, actionContentType);

                    FixupAddingResultWrappers(actionContentType, procedurePayload);

                    // TODO: Need to understand if product allow an Html form even if no parameters specified
                    request.Body = requestManager.BuildBody(actionContentType, uri, procedurePayload);
                }
            }
        }