Example #1
0
            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;
            }
Example #2
0
            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;
            }