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; }
private static HttpRequestMessage CreateHttpRequestMessageWithContext() { HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/api/controllerName/actionName"); request.SetConfiguration(new HttpConfiguration()); request.SetHttpContext(CreateHttpContext("~/api")); return request; }
public void GetVirtualPath_ReturnsVirtualPathData() { var request = new HttpRequestMessage(); request.SetHttpContext(CreateHttpContext("~/api", "APP PATH MODIFIER RETURN VALUE")); var config = new HttpConfiguration(_webApiRoutes); IHttpRoute route = _webApiRoutes.CreateRoute("api", null, null); _webApiRoutes.Add("default", route); request.Properties[HttpPropertyKeys.HttpRouteDataKey] = _webApiRoutes.GetRouteData(request); request.Properties[HttpPropertyKeys.HttpConfigurationKey] = config; IHttpVirtualPathData result = _webApiRoutes.GetVirtualPath(request, null, new HttpRouteValueDictionary { { "httproute", true } }); Assert.NotNull(result); Assert.Same(route, result.Route); Assert.Equal("APP PATH MODIFIER RETURN VALUE", result.VirtualPath); }
public void GetRouteData_WithHttpContext_MatchedRoute_ReturnsRouteData() { var request = new HttpRequestMessage(); request.SetHttpContext(CreateHttpContext("~/api")); IHttpRoute route = _webApiRoutes.CreateRoute("api", null, null); _webApiRoutes.Add("default", route); IHttpRouteData result = _webApiRoutes.GetRouteData(request); Assert.Same(route, result.Route); }
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); Stream inputStream = isInputBuffered ? requestBase.InputStream : httpContextBase.ApplicationInstance.Request.GetBufferlessInputStream(); request.Content = new StreamContent(inputStream); 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); 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]); } // 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; }
private HttpRequestMessage CreateRequestWithContext(HttpContextBase context) { HttpRequestMessage request = new HttpRequestMessage(); request.SetHttpContext(context); return request; }