public void SendAsync_UsesRouteDataFromRequestContext()
        {
            // Arrange
            Mock <HttpMessageHandler> doNotUseDefaultHandlerMock = new Mock <HttpMessageHandler>(MockBehavior.Strict);

            doNotUseDefaultHandlerMock.Protected().Setup("Dispose", true);

            using (HttpConfiguration configuration = new HttpConfiguration())
                using (HttpMessageHandler doNoUseDefaultHandler = doNotUseDefaultHandlerMock.Object)
                    using (HttpRoutingDispatcher dispatcher = new HttpRoutingDispatcher(configuration, doNoUseDefaultHandler))
                        using (HttpMessageInvoker invoker = new HttpMessageInvoker(dispatcher))
                            using (HttpRequestMessage expectedRequest = new HttpRequestMessage())
                                using (HttpResponseMessage expectedResponse = new HttpResponseMessage())
                                {
                                    SpyHttpMessageHandler routeHandler = new SpyHttpMessageHandler(expectedResponse);

                                    Mock <IHttpRoute> routeMock = new Mock <IHttpRoute>(MockBehavior.Strict);
                                    routeMock.Setup(r => r.Handler).Returns(routeHandler);

                                    Mock <IHttpRouteData> routeDataMock = new Mock <IHttpRouteData>(MockBehavior.Strict);
                                    routeDataMock.Setup(d => d.Route).Returns(routeMock.Object);
                                    routeDataMock.Setup(d => d.Values).Returns(new Dictionary <string, object>());

                                    HttpRequestContext context = new HttpRequestContext();
                                    context.RouteData = routeDataMock.Object;
                                    expectedRequest.SetRequestContext(context);

                                    // Act
                                    HttpResponseMessage response = invoker.SendAsync(expectedRequest, CancellationToken.None).Result;

                                    // Assert
                                    Assert.Same(expectedResponse, response);
                                    Assert.Same(expectedRequest, routeHandler.Request);
                                }
        }
        public void SendAsync_UsesRouteDataFromRequestContext()
        {
            // Arrange
            Mock<HttpMessageHandler> doNotUseDefaultHandlerMock = new Mock<HttpMessageHandler>(MockBehavior.Strict);
            doNotUseDefaultHandlerMock.Protected().Setup("Dispose", true);

            using (HttpConfiguration configuration = new HttpConfiguration())
            using (HttpMessageHandler doNoUseDefaultHandler = doNotUseDefaultHandlerMock.Object)
            using (HttpRoutingDispatcher dispatcher = new HttpRoutingDispatcher(configuration, doNoUseDefaultHandler))
            using (HttpMessageInvoker invoker = new HttpMessageInvoker(dispatcher))
            using (HttpRequestMessage expectedRequest = new HttpRequestMessage())
            using (HttpResponseMessage expectedResponse = new HttpResponseMessage())
            {
                SpyHttpMessageHandler routeHandler = new SpyHttpMessageHandler(expectedResponse);

                Mock<IHttpRoute> routeMock = new Mock<IHttpRoute>(MockBehavior.Strict);
                routeMock.Setup(r => r.Handler).Returns(routeHandler);

                Mock<IHttpRouteData> routeDataMock = new Mock<IHttpRouteData>(MockBehavior.Strict);
                routeDataMock.Setup(d => d.Route).Returns(routeMock.Object);
                routeDataMock.Setup(d => d.Values).Returns(new Dictionary<string, object>());

                HttpRequestContext context = new HttpRequestContext();
                context.RouteData = routeDataMock.Object;
                expectedRequest.SetRequestContext(context);

                // Act
                HttpResponseMessage response = invoker.SendAsync(expectedRequest, CancellationToken.None).Result;

                // Assert
                Assert.Same(expectedResponse, response);
                Assert.Same(expectedRequest, routeHandler.Request);
            }
        }