示例#1
0
        public void HeaderShouldBeCaseInsensitive()
        {
            HeaderCollection headers = new HeaderCollection();

            headers.SetHeader("Accept", MimeType);
            headers.SetHeader("Content-Type", MimeType);

            BuildingRequestEventArgs            requestEventArgs = new BuildingRequestEventArgs("GET", new Uri("http://localhost"), headers, null, HttpStack.Auto);
            DataServiceClientRequestMessageArgs args             = new DataServiceClientRequestMessageArgs(
                requestEventArgs.Method,
                requestEventArgs.RequestUri,
                false,
                false,
                requestEventArgs.Headers);

            HttpClientRequestMessage request   = new HttpClientRequestMessage(args);
            const int             maxPageSize  = 10;
            ODataPreferenceHeader preferHeader = new ODataPreferenceHeader(request);

            preferHeader.MaxPageSize = maxPageSize;

            Assert.Equal(maxPageSize, preferHeader.MaxPageSize);
            string expected = $"{MaxPageSizePreference}={maxPageSize}";

            Assert.Equal(expected, request.GetHeader("pReFer"));
            Assert.Equal(MimeType, request.GetHeader("accepT"));
        }
        public void TestHeaders(Dictionary <string, string> headers)
        {
            var client  = new HttpClient();
            var arg     = new DataServiceClientRequestMessageArgs("Get", new Uri("Http://localhost"), true, true, headers);
            var message = new HttpClientRequestMessage(client, arg, new DataServiceContext().Configurations);

            message.Headers.Should().BeEquivalentTo(headers);
        }
        public void TestBasic(string method, string requestUri)
        {
            var client  = new HttpClient();
            var arg     = new DataServiceClientRequestMessageArgs(method, new Uri(requestUri), true, true, new Dictionary <string, string>());
            var message = new HttpClientRequestMessage(client, arg, new DataServiceContext().Configurations);

            message.Method.Should().Be(method);
            message.Url.Should().Be(requestUri);
        }
        public void UnwrapAggregateException()
        {
            var msg  = new HttpClientRequestMessage(new DataServiceClientRequestMessageArgs("GET", new Uri("http://localhost"), false, false, new Dictionary <string, string>()));
            var task = new Task <HttpResponseMessage>(() => throw new Exception("single exception"));

            task.RunSynchronously();

            var exception = Assert.Throws <DataServiceTransportException>(() => msg.EndGetResponse(task));

            Assert.StartsWith("System.Exception: single exception\r\n", exception.Message);
        }
        DataServiceClientRequestMessage ctx_OnMessageCreating(DataServiceClientRequestMessageArgs args)
        {
            if (_workaroundDateTimeQuery != null)
            {
                args = new DataServiceClientRequestMessageArgs("GET", new Uri(_workaroundDateTimeQuery), false, false, new Dictionary <string, string>());
                _workaroundDateTimeQuery = null;
            }
            HttpClientRequestMessage clientRequestMessage = new HttpClientRequestMessage(args);

            clientRequestMessage.Credentials = CredentialCache.DefaultCredentials;
            return(clientRequestMessage);
        }
        private void SendRequest(DataServiceClientRequestMessage requestMessage)
        {
            Assert.IsNotNull(requestMessage, "sendRequest test hook was called with null request message");

            HttpClientRequestMessage httpClientRequestMessage = requestMessage as HttpClientRequestMessage;

            if (httpClientRequestMessage != null)
            {
                Dictionary <string, string> headers = WrapHttpRequestHeaders(httpClientRequestMessage.HttpRequestMessage.Headers);
                headers.Add("__Uri", httpClientRequestMessage.Url.AbsoluteUri);
                headers.Add("__HttpVerb", httpClientRequestMessage.HttpRequestMessage.Method.ToString());
                requestHeaders.Add(headers);

                requestMessage.SetHeader("__Uri", httpClientRequestMessage.Url.AbsoluteUri);
                requestMessage.SetHeader("__HttpVerb", httpClientRequestMessage.Method);

                if (null != this.CustomSendRequestAction)
                {
                    this.CustomSendRequestAction(httpClientRequestMessage.HttpRequestMessage);
                }
            }
            else
            {
                HttpWebRequestMessage       webRequestMessage = requestMessage as HttpWebRequestMessage;
                Dictionary <string, string> headers           = WrapHttpHeaders(webRequestMessage.HttpWebRequest.Headers);
                headers.Add("__Uri", webRequestMessage.Url.AbsoluteUri);
                headers.Add("__HttpVerb", webRequestMessage.HttpWebRequest.Method.ToString());
                requestHeaders.Add(headers);

                requestMessage.SetHeader("__Uri", webRequestMessage.Url.AbsoluteUri);
                requestMessage.SetHeader("__HttpVerb", webRequestMessage.Method);

                if (null != this.CustomSendRequestAction)
                {
                    this.CustomSendRequestAction(webRequestMessage.HttpWebRequest);
                }
            }
        }
示例#7
0
        private DataServiceContextWrapper<DefaultContainer> CreateContext()
        {
            var wrappedContext = this.CreateWrappedContext<DefaultContainer>();
            wrappedContext.Configurations.RequestPipeline.OnMessageCreating =
                (args) =>
                {
                    var message = new HttpClientRequestMessage(args.ActualMethod)
                    {
                        Url = args.RequestUri,
                        Method = args.Method,
                    };

                    foreach (var header in args.Headers)
                    {
                        message.SetHeader(header.Key, header.Value);
                    }

                    return message;
                };

            return wrappedContext;
        }
        /// <summary>
        /// Loads the metadata and converts it into an EdmModel that is then used by a dataservice context
        /// This allows the user to use the DataServiceContext directly without having to manually pass an IEdmModel in the Format
        /// </summary>
        /// <returns>A service model to be used in format tracking</returns>
        internal IEdmModel LoadServiceModelFromNetwork()
        {
            DataServiceClientRequestMessage httpRequest;
            BuildingRequestEventArgs        requestEventArgs = null;

            // test hook for injecting a network request to use instead of the default
            if (InjectMetadataHttpNetworkRequest != null)
            {
                httpRequest = InjectMetadataHttpNetworkRequest();
            }
            else
            {
                requestEventArgs = new BuildingRequestEventArgs(
                    "GET",
                    context.GetMetadataUri(),
                    null,
                    null,
                    context.HttpStack);

                // fire the right events if they exist to allow user to modify the request
                if (context.HasBuildingRequestEventHandlers)
                {
                    requestEventArgs = context.CreateRequestArgsAndFireBuildingRequest(
                        requestEventArgs.Method,
                        requestEventArgs.RequestUri,
                        requestEventArgs.HeaderCollection,
                        requestEventArgs.ClientHttpStack,
                        requestEventArgs.Descriptor);
                }

                DataServiceClientRequestMessageArgs args = new DataServiceClientRequestMessageArgs(
                    requestEventArgs.Method,
                    requestEventArgs.RequestUri,
                    context.UseDefaultCredentials,
                    context.UsePostTunneling,
                    requestEventArgs.Headers);

                httpRequest = new HttpClientRequestMessage(args);
            }

            Descriptor descriptor = requestEventArgs != null ? requestEventArgs.Descriptor : null;

            // fire the right events if they exist
            if (context.HasSendingRequest2EventHandlers)
            {
                SendingRequest2EventArgs eventArgs = new SendingRequest2EventArgs(
                    httpRequest,
                    descriptor,
                    false);

                context.FireSendingRequest2(eventArgs);
            }

            Task <IODataResponseMessage> asyncResponse =
                Task <IODataResponseMessage> .Factory.FromAsync(httpRequest.BeginGetResponse, httpRequest.EndGetResponse,
                                                                httpRequest);

            IODataResponseMessage response = asyncResponse.GetAwaiter().GetResult();

            ReceivingResponseEventArgs responseEvent = new ReceivingResponseEventArgs(response, descriptor);

            context.FireReceivingResponseEvent(responseEvent);

            using (StreamReader streamReader = new StreamReader(response.GetStream()))
                using (XmlReader xmlReader = XmlReader.Create(streamReader))
                {
                    return(CsdlReader.Parse(xmlReader));
                }
        }