internal RequestState(HttpRequestMessage request, CancellationToken cancellationToken) { _request = request; _responseTcs = new TaskCompletionSource <HttpResponseMessage>(); if (request.RequestUri.IsDefaultPort) { request.Headers.Host = request.RequestUri.Host; } else { request.Headers.Host = request.RequestUri.GetComponents(UriComponents.HostAndPort, UriFormat.UriEscaped); } FeatureCollection = new FeatureCollection(); HttpContext = new DefaultHttpContext(FeatureCollection); HttpContext.SetFeature <IHttpRequestFeature>(new RequestFeature()); _responseFeature = new ResponseFeature(); HttpContext.SetFeature <IHttpResponseFeature>(_responseFeature); var serverRequest = HttpContext.Request; serverRequest.Protocol = "HTTP/" + request.Version.ToString(2); serverRequest.Scheme = request.RequestUri.Scheme; serverRequest.Method = request.Method.ToString(); serverRequest.Path = PathString.FromUriComponent(request.RequestUri); serverRequest.PathBase = PathString.Empty; serverRequest.QueryString = QueryString.FromUriComponent(request.RequestUri); // TODO: serverRequest.CallCancelled = cancellationToken; foreach (var header in request.Headers) { serverRequest.Headers.AppendValues(header.Key, header.Value.ToArray()); } var requestContent = request.Content; if (requestContent != null) { foreach (var header in request.Content.Headers) { serverRequest.Headers.AppendValues(header.Key, header.Value.ToArray()); } } _responseStream = new ResponseStream(CompleteResponse); HttpContext.Response.Body = _responseStream; HttpContext.Response.StatusCode = 200; }
internal RequestState(HttpRequestMessage request, PathString pathBase) { _request = request; _responseTcs = new TaskCompletionSource <HttpResponseMessage>(); _requestAbortedSource = new CancellationTokenSource(); _pipelineFinished = false; if (request.RequestUri.IsDefaultPort) { request.Headers.Host = request.RequestUri.Host; } else { request.Headers.Host = request.RequestUri.GetComponents(UriComponents.HostAndPort, UriFormat.UriEscaped); } HttpContext = new DefaultHttpContext(); HttpContext.Features.Set <IHttpRequestFeature>(new RequestFeature()); _responseFeature = new ResponseFeature(); HttpContext.Features.Set <IHttpResponseFeature>(_responseFeature); var serverRequest = HttpContext.Request; serverRequest.Protocol = "HTTP/" + request.Version.ToString(2); serverRequest.Scheme = request.RequestUri.Scheme; serverRequest.Method = request.Method.ToString(); var fullPath = PathString.FromUriComponent(request.RequestUri); PathString remainder; if (fullPath.StartsWithSegments(pathBase, out remainder)) { serverRequest.PathBase = pathBase; serverRequest.Path = remainder; } else { serverRequest.PathBase = PathString.Empty; serverRequest.Path = fullPath; } serverRequest.QueryString = QueryString.FromUriComponent(request.RequestUri); foreach (var header in request.Headers) { serverRequest.Headers.Append(header.Key, header.Value.ToArray()); } var requestContent = request.Content; if (requestContent != null) { foreach (var header in request.Content.Headers) { serverRequest.Headers.Append(header.Key, header.Value.ToArray()); } } _responseStream = new ResponseStream(ReturnResponseMessage, AbortRequest); HttpContext.Response.Body = _responseStream; HttpContext.Response.StatusCode = 200; HttpContext.RequestAborted = _requestAbortedSource.Token; }