internal static HttpRequestMessage ConvertRequest(HttpContextBase httpContextBase) { Contract.Assert(httpContextBase != null); HttpRequestBase requestBase = httpContextBase.Request; HttpMethod method = HttpMethodHelper.GetHttpMethod(requestBase.HttpMethod); Uri uri = requestBase.Url; HttpRequestMessage request = new HttpRequestMessage(method, uri); // Choose a buffered or bufferless input stream based on user's policy IHostBufferPolicySelector policySelector = _bufferPolicySelector.Value; bool isInputBuffered = policySelector == null ? true : policySelector.UseBufferedInputStream(httpContextBase); if (isInputBuffered) { request.Content = new LazyStreamContent(() => requestBase.InputStream); } else { request.Content = new LazyStreamContent(() => requestBase.GetBufferlessInputStream()); } foreach (string headerName in requestBase.Headers) { string[] values = requestBase.Headers.GetValues(headerName); AddHeaderToHttpRequestMessage(request, headerName, values); } // Add context to enable route lookup later on request.SetHttpContext(httpContextBase); HttpRequestContext requestContext = new WebHostHttpRequestContext(httpContextBase, requestBase, request); request.SetRequestContext(requestContext); IDictionary httpContextItems = httpContextBase.Items; // Add the OWIN environment, when available (such as when using the OWIN integrated pipeline HTTP module). if (httpContextItems != null && httpContextItems.Contains(OwinEnvironmentHttpContextKey)) { request.Properties.Add(OwinEnvironmentKey, httpContextItems[OwinEnvironmentHttpContextKey]); } // The following three properties are set for backwards compatibility only. The request context controls // the behavior for all cases except when accessing the property directly by key. // Add the retrieve client certificate delegate to the property bag to enable lookup later on request.Properties.Add(HttpPropertyKeys.RetrieveClientCertificateDelegateKey, _retrieveClientCertificate); // Add information about whether the request is local or not request.Properties.Add(HttpPropertyKeys.IsLocalKey, new Lazy <bool>(() => requestBase.IsLocal)); // Add information about whether custom errors are enabled for this request or not request.Properties.Add(HttpPropertyKeys.IncludeErrorDetailKey, new Lazy <bool>(() => !httpContextBase.IsCustomErrorEnabled)); return(request); }
public void RequestGet_ReturnsProvidedInstance() { // Arrange HttpContextBase webContext = CreateDummyWebContext(); HttpRequestBase webRequest = CreateDummyWebRequest(); using (HttpRequestMessage expectedRequest = CreateRequest()) { WebHostHttpRequestContext context = CreateProductUnderTest(webContext, webRequest, expectedRequest); // Act HttpRequestMessage request = context.Request; // Assert Assert.Same(expectedRequest, request); } }
internal static HttpRequestMessage ConvertRequest(HttpContextBase httpContextBase) { Contract.Assert(httpContextBase != null); HttpRequestBase requestBase = httpContextBase.Request; HttpMethod method = HttpMethodHelper.GetHttpMethod(requestBase.HttpMethod); Uri uri = requestBase.Url; HttpRequestMessage request = new HttpRequestMessage(method, uri); // Choose a buffered or bufferless input stream based on user's policy IHostBufferPolicySelector policySelector = _bufferPolicySelector.Value; bool isInputBuffered = policySelector == null ? true : policySelector.UseBufferedInputStream(httpContextBase); if (isInputBuffered) { request.Content = new LazyStreamContent(() => new SeekableBufferedRequestStream(requestBase)); } else { request.Content = new LazyStreamContent(() => requestBase.GetBufferlessInputStream()); } foreach (string headerName in requestBase.Headers) { string[] values = requestBase.Headers.GetValues(headerName); AddHeaderToHttpRequestMessage(request, headerName, values); } // Add context to enable route lookup later on request.SetHttpContext(httpContextBase); HttpRequestContext requestContext = new WebHostHttpRequestContext(httpContextBase, requestBase, request); request.SetRequestContext(requestContext); IDictionary httpContextItems = httpContextBase.Items; // Add the OWIN environment, when available (such as when using the OWIN integrated pipeline HTTP module). if (httpContextItems != null && httpContextItems.Contains(OwinEnvironmentHttpContextKey)) { request.Properties.Add(OwinEnvironmentKey, httpContextItems[OwinEnvironmentHttpContextKey]); } // The following three properties are set for backwards compatibility only. The request context controls // the behavior for all cases except when accessing the property directly by key. // Add the retrieve client certificate delegate to the property bag to enable lookup later on request.Properties.Add(HttpPropertyKeys.RetrieveClientCertificateDelegateKey, _retrieveClientCertificate); // Add information about whether the request is local or not request.Properties.Add(HttpPropertyKeys.IsLocalKey, new Lazy<bool>(() => requestBase.IsLocal)); // Add information about whether custom errors are enabled for this request or not request.Properties.Add(HttpPropertyKeys.IncludeErrorDetailKey, new Lazy<bool>(() => !httpContextBase.IsCustomErrorEnabled)); return request; }